2012-01-30 62 views
1

我想暴露一個用WCF寫的web服務,打開互聯網,但我有麻煩配置它從外部網址使用。在互聯網配置公開WCF Web服務

該Web服務內部託管在https://ourportal.internaldomain.intra:9011/FrontEndWS,並運行良好。我們在https://www.internetdomain.com.mt/FrontEndWS上公開了webservice,但是當從外部地址訪問它時,soap URL仍然會引用內部地址。

我們的設置如下。我們不需要在內部公開web服務,只需在互聯網上,這樣就可以簡化配置。

<bindings> 
<basicHttpBinding> 
    <binding name="LargeMessagingBinding" maxBufferSize="99999900" maxBufferPoolSize="524288000" maxReceivedMessageSize="99999900"> 
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="99999900" maxBytesPerRead="99999900" maxNameTableCharCount="2147483647" /> 
    <security> 
     <transport clientCredentialType="Basic" /> 
    </security> 
    </binding> 
</basicHttpBinding> 
</bindings> 
<behaviors> 
<serviceBehaviors> 
    <behavior name="ServiceBehaviour"> 
    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
    <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
    </behavior> 
</serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="false" /> 

+0

主機頭你有多個網卡,你的機器上?你有沒有嘗試爲你的服務指定基地址? – 2012-01-30 08:08:15

+0

你的配置中沒有''標籤 - 你沒有定義任何服務..... – 2012-01-30 08:31:10

+0

@hasam khan - 兩個問題都沒有。 – 2012-01-30 09:20:52

回答

0

爲了使您的Web服務的外部世界,你必須在虛擬目錄WCF服務在IIS網站下。

現在,您的網址「www.internetdomain.com.nt」將映射到特定的IP地址(可從外部訪問),並且此IP地址是WCF服務所在服務器的IP地址。

此IP上的任何請求都由IIS接收,並確定如何提供請求。

如果上面是好的,然後你的WCF服務的URL將是:

http://www.internetdomain.com.nt/virtualdirectory/FrontEndWS 
https://www.internetdomain.com.nt/virtualdirectory/FrontEndWS 

對於https情況下,你的網站必須通過Edit Bindings選項映射443 HTTPS端口,並指定服務它需要使用的證書。

此外,您還需要使用web.config中的端點定義您的服務。下面示出例如:

<bindings> 
<basicHttpBinding> 
    <binding name="LargeMessagingBinding" maxBufferSize="99999900" maxBufferPoolSize="524288000" maxReceivedMessageSize="99999900"> 
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="99999900" maxBytesPerRead="99999900" maxNameTableCharCount="2147483647" /> 
    <security> 
     <transport clientCredentialType="Basic" /> 
    </security> 
    </binding> 
</basicHttpBinding> 
</bindings> 
<services> 
     <service name="SampleWCFService.Service1" behaviorConfiguration="default"> 
     <endpoint address="" behaviorConfiguration="ServiceBehaviour" binding="basicHttpBinding" bindingConfiguration="LargeMessageBinding" contract="SampleWCFService.IService1"/> 
     </service> 
</services> 
<behaviors> 
<serviceBehaviors> 
    <behavior name="ServiceBehaviour"> 
    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
    <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
    </behavior> 
</serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="false" /> 

檢查服務元件在上述結構中。確保服務的命名空間已正確指定。

+0

通過https可以訪問Web服務。有可能使用basicHttpBinding嗎? – 2012-01-30 10:19:52

+0

如果您嘗試使用basicHttpBinding,然後使用用戶名認證,則它將不起作用,因爲WCF不允許在通道上以明文形式傳遞用戶名。 – Rajesh 2012-01-30 10:35:27

+0

但我已經嘗試過,它工作。爲了確保我沒有問題,你會在這裏提出什麼約束力? – 2012-01-30 11:05:28

0

我有同樣的問題,現在發現這是因爲Web服務器的前面是SSL卸載程序。請諮詢您的管理員組。我們擺脫了SSL卸載程序,因爲我們必須提供服務。 您可以參考以下鏈接

http://blogs.msdn.com/b/distributedservices/archive/2010/06/01/ssl-offloader-using-wcf-4-0-routing-service.aspx

http://blogs.msdn.com/b/distributedservices/archive/2010/05/13/wcf-and-intermediate-devices.aspx

還添加了HTTPS

http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html