2012-05-29 16 views
0

我有一個在ASP.NET網站還舉辦傳統的ASMX式服務託管新創建的WCF .SVC。調用從客戶端應用程序WCF服務接收EndpointNotFoundException,但沒有錯誤的瀏覽器

如果我調用SVC中包含的單個方法,則會收到以下消息。 「

」在http://localhost/REDACTEDSITE/LicenseVerification.svc沒有可以接受消息的端點偵聽,這通常是由不正確的地址或SOAP動作引起的,請參閱InnerException(如果存在)以獲取更多詳細信息。

不過,我可以貼上我的本地機器上鍊接到任何瀏覽器,並獲得「這是一個Windows©通信基礎服務。元數據發佈該服務目前被禁用。」頁面。

IIS日誌顯示瀏覽器正在發出GET請求並收到200響應。 WCF客戶端發出POST請求並接收404.0響應。

這些是我使用的最新配置設置。他們有點微不足道。

主機

<system.serviceModel> 
    <client entries for other services that work> 

    <services> 
     <service name="LicenseVerification.svc"> 
     <endpoint address="LicenseVerification.svc" 
      binding="basicHttpBinding" bindingConfiguration="" contract="Management.ILicenseVerification" /> 
     </service> 
    </services> 

    </system.serviceModel> 

客戶

<system.serviceModel> 
    <client> 
     <endpoint address="http://localhost/REDACTEDSITE/LicenseVerification.svc" 
      binding="basicHttpBinding" bindingConfiguration="" contract="Management.ILicenseVerification" 
      name="LicenseVerificationClient"> 
     </endpoint> 
    </client> 
    </system.serviceModel> 

合同

[ServiceContract] 
    public interface ILicenseVerification 
    { 
     [WebInvoke(Method="GET")] //have tried WebGet() 
     [OperationContract] 
     LicenseInfo GetProfileLicenseInfo(string profileName); 
    } 

Servi大街CE IMPL

public class LicenseVerification : ILicenseVerification 
    { 
     LicenseInfo ILicenseVerification.GetProfileLicenseInfo(string profileName) 
     { 
      ProfileInfo _pi = ProfileHelper.GetRequestedProfileInfo(profileName); 
      if (_pi == null) 
      { 
       return null; 
      } 

      return LicenseVerifier.GetLicenseInfo(_pi); 
     } 
    } 

我曾嘗試重新註冊asp.net 4.0,修理服務模式,重新啓動IIS,搗毀並使用MS服務配置工具重新創建配置文件,並通過手,我仍然不能得到這個上班。

這些是小的請求(幾KB),所以我不認爲它的大小問題。

那伸出的唯一的事情是GET/POST,但是這並沒有對SVC的,我做之前一直是個問題。

我的本地環境的Win7/64,VS2010,.NET 4

請讓我知道什麼嘗試。我把同樣的各種SO帖子剔除了,沒有運氣(甚至是那些看起來明顯不同的)。

+0

你有沒有試過「[WebInvoke(Method =」POST「)]」? – Zachary

回答

0

以下carlosfigueira的意見,並丟棄[網絡*]屬性和固定在配置服務的名稱後,我能得到適當的服務幫助頁面,但是這仍然沒有來自客戶端的工作。

但是,我現在可以使用svcutil來生成我的服務所需的代碼和配置。我從生成output.config文件發現端點地址是在最後重複,這樣的...

http://localhost/REDACTEDSITE/LicenseVerification.svc/LicenseVerification.svc 

這是客戶需要的,以便使用該服務打端點,當我更新客戶端配置來擊中該端點時,它已經工作了!

這仍然不是最佳的,所以我嘗試從我的服務配置中刪除地址元素,以便它現在看起來像這樣(sans behavior confg)。

<service name="Management.LicenseVerification"> 
    <endpoint binding="basicHttpBinding" contract="Management.ILicenseVerification" /> 
    </service> 

它仍然有效!

我有些困惑,爲什麼這會追加地址元素,除了可能是它在asp.net中承載這個副作用。也許地址元素(和基地址)在這種情況下不需要配置?

無論如何,這現在工作。

1

在服務器的配置的<service>元素的「名稱」屬性的值不正確。它應列出服務類別(可能爲Management.LicenseVerification)的完全限定名稱,而不是.svc文件的名稱。

一些更多的問題:

  • 你在你的操作使用[WebInvoke(Method = "GET")]。使用[WebGet]替代如果您希望通過GET訪問
  • [WebInvoke](和[WebGet])僅適用於使用webHttpBinding且端點行爲爲<webHttp/>的終端,但您沒有使用basicHttpBinding)。
  • 瀏覽器正在發送一個GET請求,但它沒有調用該操作,它可能正在獲取服務幫助頁面。所以它可能不是真的從瀏覽器「工作」。
+0

儘管這些並沒有真正解決問題,但他們的確讓我得到了一個可行的解決方案,所以謝謝@carlosfigueria! – StingyJack

相關問題