2008-09-16 65 views
2

我有一個WPF應用程序在VS 2008與一些Web服務引用。由於各種原因(最大消息大小,身份驗證方法),我需要在WPF客戶端的app.config中爲服務綁定手動定義一些設置。Visual Studio basicHttpBinding和端點問題

不幸的是,這意味着當我更新項目中的服務引用時,我們最終會遇到一個混亂 - 多個綁定和端點。 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" /> 

我們使用服務工廠類,因此,如果這些設置都弄好了可以通過編程設置,將工作,儘管這些房產似乎沒有暴露。

回答

2

創建一個使用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^

+0

感謝超人 - 這看起來可能會伎倆。 – Nathan 2008-09-17 23:31:01

0

不知何故,我更喜歡直接使用svcutil.exe,而不是使用Visual Studio的「添加服務引用」功能:P這就是我們在WCF項目中所做的。

0

我明白你的意思,svcutil是定義更加先進的添加和更新服務引用的方式。當「右鍵單擊,更新參考」非常接近僅僅在一個步驟中工作時,它只是一個更公平的手動工作。

我想我們可以創建一些批處理文件或者只是輸出參考代碼。即便如此,使用svcutil手動檢出並更新服務代碼可能比僅取消配置檢查更有效。

感謝您的建議,無論如何。

2

而不是改變所生成的端點,uou可以添加一個第二端點和綁定定義與您需要的配置,然後在您的代碼中只需將新端點的名稱放入您的服務客戶端構造函數中。

0

我們所做的是檢查(通過源代碼管理)由svcutil.exe實用程序自動生成的app.config和* .cs文件,然後運行一個運行svcutil.exe的批處理文件以檢索服務元數據。完成後,我們重新編譯代碼,確保它可以正常工作,然後檢查更新後的app.config和* .cs文件。這比使用Visual Studio中常見的「添加服務參考」更可靠。