Visual Studio basicHttpBinding和端点问题
我在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中使用经常使用的"添加服务引用"要可靠得多。