2010-06-14 66 views
3

在生產服務器(Windows Server 2003 SP2)上,我可以使用Internet Explorer 8連接到遠程WCF服務:當瀏覽到URL http://www.domain.com/Service.svc(我的服務偵聽的地方)時,顯示所需服務的信息頁面。 Internet Explorer中的連接設置僅指定「自動檢測」,禁用代理設置。瀏覽器連接到WCF服務,但不是我的WCF客戶端。可能是什麼原因?

如果我在同一臺服務器上啓動一個控制檯應用程序(使用.NET 4.0中的WCF構建),該服務器也嘗試連接到相同的WCF服務,但它告訴我在http://www.domain.com/Service.svc上沒有可用的終端節點。

配置WCF客戶端的:

<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" transactionFlow="false" 
      hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
      allowCookies="false"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" 
       maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" 
       enabled="false" /> 
      <security mode="None"> 
      <transport clientCredentialType="Windows" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true"/> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://www.domain.com/Service.svc" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyService" 
      contract="Service.IMyService" name="WSHttpBinding_IMyService" /> 
    </client> 
    </system.serviceModel> 
<configuration> 

通過這些設置,我可以從我的開發機器的遠程服務通信成功。

四處尋找其他的選擇,我發現我可以指定要使用的Internet Explorer代理設置有:

<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="true" /> 
    </defaultProxy> 
</system.net> 

它沒有工作,我不知道如果我真的理解正確此設置。 (我的希望是,WCF客戶端將採用IE瀏覽器的「自動檢測」設置,然後以同樣的方式連接到像安裝了IE的服務。)

我也有切換在真實之間的綁定配置的useDefaultWebProxy設置並沒有成功的假。

現在我正在尋求幫助,我可以做些什麼?哪些設置可能錯誤或丟失?我可以測試什麼?如何獲得更詳細的錯誤信息以更好地識別問題?

預先感謝您!

編輯:

堆棧中Innerexception是說:

  • System.Net.WebException:連接到遠程服務器無法建立
  • 的System.Net.Sockets。 SocketException:連接失敗,因爲主機在一段時間後沒有應答,或連接出現故障,因爲連接的主機沒有回答。

回答

2

雖然Internet Explorer可以連接到服務時不指定代理地址,但只啓用「自動檢測」功能,這在設置<proxy usesystemdefault="true" />時似乎不適用於我的WCF客戶端。 (文檔說:這將皮卡Internet Explorer設置,但它不工作。)最後,客戶給我一個具體的代理服務器地址和我已經改變了我的客戶端配置的結合方式如下:

  • 改變:useDefaultWebProxy="false"(而不是true
  • 補充:proxyAddress="http://10.20.30.40:8080"(EDIT2:不僅IP地址與http://的前綴是很重要的,否則它會拋出新的異常,請參閱下面的後續問題!)

由此WebException和SocketConnection消失客戶似乎連接到該服務,但在調用第一個服務操作時,我現在有下一個問題。我會把這個問題提出一個新問題。

編輯:這裏是後續問題:

Strange exception when connecting to a WCF service via a proxy server

EDIT2:根據後續問題的答案它的前綴proxyAddresshttp是很重要的。 (現改爲我的答案)

+0

我知道這個線程很舊,但我一直在遇到這個問題,並最終在這裏。我仍然不明白爲什麼「UsesSystemDefault = true」設置不起作用 - 如果邏輯成立,它應該導致WCF服務使用IE配置的代理設置 - 但它不是;代理地址仍然需要在WCF客戶端中顯式配置。任何人對此有解釋? – PIntag 2015-03-27 15:52:05

0

我不知道你如何託管你的服務,IIS?

我沒有看到比

<security mode="None"> 
    <transport clientCredentialType="Windows" proxyCredentialType="None" 
     realm="" /> 
    <message clientCredentialType="Windows" negotiateServiceCredential="true"/> 
    </security> 

如果說,當你在看到該服務的IE瀏覽器的地址類型,然後領我相信什麼毛病確實在配置方面,其他這是安全設置是錯誤的。嘗試從客戶端配置文件中刪除安全塊,或者從任何地方刪除安全塊,然後查看是否有效。...

如果確實如此,我們可能會縮小範圍...

+0

的情況一樣簡單。安全模式在服務和客戶端都設置爲「無」。該服務託管在Windows Server 2008上的IIS 7.0中,如果有的話。令我困惑的是,它可以從我的刪除計算機上運行,​​但不能從生產機器運行 - 具有相同的配置。 – Slauma 2010-06-15 00:22:55

+0

這是實際的端點「address =」http://www.domain.com/Service.scv「還是你在開發機器上使用」localhost「? – VoodooChild 2010-06-15 01:22:46

+0

不,我正在測試一個」live「服務 - 也在我的開發機器上,所以服務地址在兩個配置中,在我的開發客戶端和生產客戶端上都是完全一樣的(另見我對marc_s的回答的評論) – Slauma 2010-06-15 13:31:00

0

你也許剛在客戶端的地址上輸入一個錯字?

address="http://www.domain.com/Service.scv" 

難道不應該是(.SVC而不是在年底.scv)

address="http://www.domain.com/Service.svc" 

(確認爲在現實中沒有錯字)

而且,這個地址將表明您* .svc文件位於該機器的根目錄下 - 是這種情況嗎?通常,在IIS,你的地址會由機器名,其中* .svc文件所在的虛擬目錄,而* .svc文件本身,所以像:

http://www.domain.com/ServiceDirectory/Service.svc 
+0

啊,對不起,它寫在我的這個問題實際上是'svc'(我在我的問題中已經改變了它),我猜測它也是一樣的(我從開發移植到生產機器時可能寫錯了),特別是因爲它深夜我只在眼前看到了一個旋轉配置標籤的湯,爲了確保地址正確,我複製並粘貼了它,然後從dev到生產配置文件。所以最後:dev配置中的地址與生產配置中的地址完全相同。 – Slauma 2010-06-15 13:21:35

+0

是的,svc文件真的在IIS站點的根目錄中。它似乎工作(從我的開發機器)。但是這種不好的做法(從安全角度來看,可能是?)?在子文件夾中它應該更好嗎? svc文件只有一行帶有「,服務本身位於Bin文件夾中的單獨DLL程序集中。 – Slauma 2010-06-15 13:27:09

+0

只是爲了確保您的服務位於「.. \ Inetpub \ wwwroot \ ServiceDirectory」中? – VoodooChild 2010-06-15 14:28:50

0

這裏的問題我已刪除該塊,但它並沒有幫助可能是作爲真正的VS真

<proxy usesystemdefault="True" /> 
相關問題