Visual Studio basicHttpBinding和端点问题

时间:2008-09-16 02:46:52

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

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

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

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

目前我们正在解决这个问题,只需在更新引用后撤消app.config上的checkout,但我不禁想到必须有更好的方法!

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

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

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

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

5 个答案:

答案 0 :(得分:2)

创建一个.bat文件,该文件使用svcutil进行代理生成,该文件具有适合您项目的设置。这很容易。点击bat文件,只要界面被更改就生成新的代理文件很容易。

然后可以在自动构建中使用批处理。然后你只需要设置一次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 ^

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我认为,svcutil绝对是添加和更新服务引用的更高级方法。当“右键单击,更新参考”非常接近于只需一步操作时,它只需要更多的手动工作。

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

感谢您的建议。

答案 4 :(得分:0)

我们做的是检查(从源代码控制)svcutil.exe实用程序自动生成的app.config和* .cs文件,然后运行运行svcutil.exe的批处理文件来检索服务元数据。完成后,我们重新编译代码,确保它有效,然后检查更新的app.config和* .cs文件。它比使用Visual Studio的oft-buggy“添加服务引用”更可靠。