【问题标题】:Visual Studio basicHttpBinding and endpoint problemsVisual Studio basicHttpBinding 和端点问题
【发布时间】:2010-09-09 07:11:48
【问题描述】:

我在 VS 2008 中有一个 WPF 应用程序,其中包含一些 Web 服务引用。由于各种原因(最大消息大小、身份验证方法),我需要在 WPF 客户端的 app.config 中为服务绑定手动定义一些设置。

不幸的是,这意味着当我更新项目中的服务引用时,我们最终会陷入混乱 - 多个绑定和端点。 Visual Studio 使用数字后缀(即“Service1”作为“Service”的副本)创建新的绑定和端点,导致配置无效,因为项目中的每个服务引用可能只有一个绑定。

这很容易复制 - 只需在解决方案中创建一个简单的“Hello World”ASP.Net Web 服务和 WPF 应用程序,更改 app.config 绑定中的 maxBufferSize 和 maxReceivedMessageSize,然后更新服务引用。

目前我们正在通过在更新引用后简单地撤消 app.config 上的结帐来解决此问题,但我不禁认为必须有更好的方法!

另外,我们需要手动更改的设置是:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

和:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

我们使用服务工厂类,因此如果这些设置能够以某种方式以编程方式进行设置,这将起作用,尽管这些属性似乎没有公开。

【问题讨论】:

    标签: asp.net wpf visual-studio web-services


    【解决方案1】:

    我们所做的是检查(从源代码管理)由 svcutil.exe 实用程序自动生成的 app.config 和 *.cs 文件,然后我们运行一个运行 svcutil.exe 的批处理文件来检索服务元数据.完成后,我们重新编译代码,确保它可以正常工作,然后重新检查更新的 app.config 和 *.cs 文件。这比在 Visual Studio 中使用经常出错的“添加服务引用”要可靠得多。

    【讨论】:

      【解决方案2】:

      您可以使用您需要的配置添加第二个端点和绑定定义,而不是更改生成的端点,然后在您的代码中将新端点的名称放入您的服务客户端构造函数中。

      【讨论】:

        【解决方案3】:

        创建一个使用 svcutil 的 .Bat 文件,用于代理生成,该文件具有适合您项目的设置。这很容易。点击batfile,每当界面发生变化时生成新的代理文件很容易。

        该批次随后可用于自动构建。然后您只需要设置一次 app.config(或 web.config)。我们一般会针对不同的环境,例如 dev、test prod 分开不同的配置。

        示例(注意换行符):

        REM generate meta data
        call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"
        
        REM making sure the file is writable
        attrib -r "MyServiceProxy.cs"
        
        REM create new proxy file
        call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 
        

        :)

        //W

        【讨论】:

          【解决方案4】:

          我同意你的观点,svcutil 绝对是添加和更新服务引用的更高级方法。当“右键单击,更新参考”非常接近于一步完成时,它只是更多的手动工作。

          我想我们可以创建一些批处理文件或其他东西来输出参考代码。即便如此,使用 svcutil 手动签出和更新服务代码可能比仅撤消配置上的签出要多。

          无论如何感谢您的建议。

          【讨论】:

            【解决方案5】:

            不知何故,我更喜欢直接使用 svcutil.exe,而不是使用 Visual Studio 的“添加服务引用”功能:P 这就是我们在 WCF 项目中所做的。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-05-15
              • 1970-01-01
              • 1970-01-01
              • 2015-06-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多