2013-08-05 41 views
0

的Windows Phone 8,Windows 8的更新+ 64位,2012年VS運行VS2012作爲管理員遠程服務器返回錯誤:NOTFOUND WCF服務

我創建了一個WCF服務。對服務代碼:

[OperationContract] 
    Object GetCustomersObject(); 

實現代碼

public Object GetCustomersObject() 
    { 
     object c = DataContext.Customers; 
     return c; 
    } 

然後我添加一個新的網站我的應用程序和配置Service.svc文件指向合同等在運行它網頁瀏覽器,並可以看到WSDL。

然後,我使用WCFTestClient實用程序對其進行測試,但除了上述之外,我可以連接到所有方法,因爲它不支持對象。

我現在創建一個Win Phone 8項目並連接到該服務,然後出現錯誤「在System.ServiceModel.ni.dll中發生類型爲'System.ServiceModel.CommunicationException'的異常,但未在用戶中處理代碼「

擴展異常我發現消息是遠程服務器返回一個錯誤:NotFound。。然後,我按照在http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj684580(v=vs.105).aspx找到的步驟,因爲我在VS下運行IIS我不按照其他任何指示(即我添加一個條目的建議,並打開防火牆端口,刪除現有的服務,並在關閉後讀取它IIS服務)。

我仍然得到相同的錯誤。所以我刪除服務並重新添加它使用IP,機器名稱和使用的任何一個仍然給出相同的錯誤。

我也嘗試關閉Windows防火牆服務,以消除它是一個防火牆問題,同樣的問題依然存在。

我失去了什麼我可以嘗試?

+0

你可以打開跟蹤:http://inaspiralarray.blogspot.com/2013/04/finding-root-cause-of- wcf-exceptions.html –

回答

1

不幸的是,「NotFound」並不意味着該服務實際上沒有找到。這是IIS的方式告訴你「失敗的東西」。

由於您的服務或服務界面上沒有KnownType或ServiceKnownType屬性,因此很可能會發生故障,儘管您需要一個屬性。

WCF的序列化程序不是無所不知的。它會查看你的函數簽名並正確地序列化。你的簽名說你返回一個對象。返回除nullnew object()以外的任何內容都會刺激串行器並使服務調用失敗。如果您想序列化一些不是基本框架類型並且在方法簽名中不可見的內容,則需要在服務類上放置一個KnownType屬性,或者在您的界面上放置一個ServiceKnownType屬性,以便DataContractSerializer知道即將到來的內容。

例子:

[ServiceContract] 
[ServiceKnownType(typeof(YourCustomer))] 
public interface IYourService 
{ 
    [OperationContract] 
    Object GetCustomersObject(); 
} 
+0

堆棧許多已知類型屬性的替代方法:http://inaspiralarray.blogspot.com/2013/07/an-alternative-to-stacking-many.html –

+0

大家好,我很害怕添加上述屬性後(ServiceKnownType)我仍然得到相同的錯誤。只是爲了消除即時通訊不做錯誤的任何人都知道一個工作教程,我可以參考和看到的結果呢?或者縮小上述方法是否正常工作? – Computer

+1

您可以嘗試使用Visual Studio在添加新的WCF服務項目時創建的服務。如果工作正常,問題在於你的代碼,如果不是,問題在於基礎設施。 – nvoigt

1

你通常會看到一個因的CommunicationException應用程序不能在本地主機在網上找到的服務。

下面是相同的解決方案也許能行得通

https://msdn.microsoft.com/library/windows/apps/jj684580%28v=vs.105%29.aspx

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Max

相關問題