2010-07-14 73 views
1

我的服務可以使用正常的WCF調用,但爲了公開元數據(wsdl文件),我必須以正常WCF主機發生故障的方式更改配置。未找到WCF基址

我已經花了無數小時在谷歌試圖解決這個問題,有一個很大的問題是,託管一個網站內的服務從來沒有討論(是的這是不同的)。

要求:

  • 奔跑在現有的網站
  • 使用會話
  • 可與Java和儘可能多的.NET版本越好。
  • 揭露的元數據(WSDL將足夠)

編輯:

  • IIS不能
  • 我使用.NET 4和WCF 4.

在使用這個配置的元數據可以達到(通過wsdl文件),但是當試圖託管正常的wcf端點時,我得到和InvalidOperationException:

無法找到與綁定WSHttpBinding的端點匹配方案http的基地址。註冊的基地址方案是[]。

所以基地址被忽略。

但是當我提供詳細地址的端點(只需在當前地址前面的基地址複製)正常WCF調用做工精細,但在嘗試訪問元數據,我得到以下錯誤時: 沒有協議綁定匹配給定地址'http://localhost:8080/Functionality'。

協議綁定在IIS或WAS配置中的站點級別配置。

這裏是web.config serviceModel部分,我做了一個小測試網站只是爲了測試這個,但它將是很多發佈它在這裏,如果你給我一個下午雖然我會電子郵件它給你。

<system.serviceModel> 
    <services> 
    <service behaviorConfiguration="metadataSupport" name="MyStuff.TestWithMetadata"> 
    <endpoint address="Functionality" binding="wsHttpBinding" name="FunctionalityBinding" 
    contract="MyStuff.ITestWithMetadata" /> 
    <host> 
    <baseAddresses> 
     <add baseAddress="http://localhost:8080/" /> 
    </baseAddresses> 
    </host> 
    </service> 
    </services> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="metadataSupport"> 
    <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="metadataSupport"> 
    <!--Navigate with browser to httpGetUrl for the wsdl file--> 
    <serviceMetadata httpGetEnabled="true" httpGetUrl="Metadata" /> 
    <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false"> 
    <serviceActivations> 
    <add relativeAddress="TestWithMetadata.svc" service="MyStuff.TestWithMetadata" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

如果有人對如何解決此問題有任何意見,請幫忙。

回答

1

當您在IIS中託管服務時(我從您的要求中假設「在現有網站中運行」),那麼您在配置中的基址是無效的 - 它根本不會被使用。

  • 您的服務器名稱
  • 可能是端口號
  • 虛擬目錄(也可能是其子目錄),其中* .svc文件:

    當IIS託管,服務地址是通過確定生活

  • *。SVC文件本身(包括擴展名)

因此,它可能是這樣的:

http://MyServer:7777/ExistingWebApp/TestWithMetadata.svc 

或不管它是什麼,你有你的情況。

你似乎是使用.NET 4.0和WCF 4(從來沒有提出過......),並在這種情況下,你可以跳過* .SVC通過調整你的配置完全進入文件:

<serviceHostingEnvironment multipleSiteBindingsEnabled="false"> 
    <serviceActivations> 
     <add relativeAddress="MyService" service="MyStuff.TestWithMetadata" /> 
    </serviceActivations> 
</serviceHostingEnvironment> 

在這種情況下,relativeAddress=值變爲服務地址(虛擬目錄內這個web.config生活) - 讓你的服務地址將是這樣的:

http://MyServer:7777/ExistingWebApp/MyService 

在無需使用* .svc文件所有在這種情況下。

+0

該死,忘了那個要求,我不能使用IIS!所以我使用默認的網頁develloper。是的,我使用.NET 4和WCF 4. 隨着您的解決方案,它說它確實需要擴展,可能是因爲我沒有使用IIS。 – MrFox 2010-07-14 09:44:18

+0

@MFFOX:是的,serviceHostingEnvironment設置需要IIS7或更高版本。在開發者WebDev中不起作用。 – 2010-07-15 10:30:40

1

原來我應該使用httpGetUrl鏈接來獲取元數據,而不是.svc文件,因爲基地址可以被忽略。

我也把這個測試的東西移到了實際的網站上,並且加載了零終點的問題。這是由serviceActivations中的服務引用未設置爲完整服務名稱(需要包含名稱空間)引起的。

我接受了marc的回答,因爲他確實幫助我,並防止這個問題出現在未答覆的問題中。