Visual Studio basicHttpBinding和端点问题

时间:2020-03-05 18:55:03  来源:igfitidea点击:

我在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" />

我们使用服务工厂类,因此,尽管可以通过编程方式设置这些设置,但这些属性似乎并未公开,但是它们可以通过编程进行设置。

解决方案

回答

以某种方式,我更喜欢直接使用svcutil.exe,而不是使用Visual Studio的"添加服务引用"功能:P这就是我们在WCF项目上正在做的事情。

回答

我认为,svcutil无疑是添加和更新服务引用的更高级的方法。当"右键单击,更新参考"非常接近仅一步之遥时,它的工作量就更多了。

我想我们可以创建一些批处理文件或者仅输出参考代码的文件。即使那样,用svcutil手动检出和更新服务代码也可能比仅撤消config检出更多的工作。

无论如何,谢谢建议。

回答

创建一个使用svcutil进行代理生成的.Bat文件,该文件具有适合项目的设置。这很容易。单击batfile,只要更改接口即可生成新的代理文件。

然后,该批处理以后可以在自动构建中使用。然后,我们只需设置一次app.config(或者web.config)。我们通常针对不同的环境(例如开发人员,测试人员)分离不同的配置。

示例(注意换行符):

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

回答

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

回答

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