2012-12-12 68 views
1

我有一個Windows服務,它充當從外部源接收數據的傳播者。此Windows服務託管WCF ServiceHostNetNamedPipeBinding()ServiceContract還定義了CallbackContractWinRT - 使用WCF服務

還有一個客戶端DLL組件,它使用服務器並將解析的數據作爲事件冒泡。數據從服務器接收回調後冒泡。

的代碼在桌面應用程序,但是當我試圖引用的WinRT應用程序客戶端DLL我獲得以下錯誤:

The pipe name could not be obtained for the pipe URI: Access is denied. (5, 0x5)

我想這是因爲WinRT的(據我所知)缺乏支持命名管道。

如何在WinRT中使用這樣的服務?我可以改變WCF端的任何要求,但它必須作爲Windows服務託管(它沒有WinRT的消費者)。溝通將始終發生在同一臺機器內,投票是最後的手段。

回答

0

首先您需要切換到basicHttpBinding,因爲net.namedpipe不受支持。

實際支持是basicHttpBinding的,NetTcpBinding的,NetHttpBinding

其次在WinRT中有合適的策略,這樣可以阻止用戶訪問本地主機通過網絡堆棧。

爲了克服這個安全策略,你需要爲你的應用程序添加一個LoopbackExempt。

CheckNetIsolation.exe LoopbackExempt -s 

請參閱MSDN上的詳細信息: http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx

對於雙工方式或者輪詢的aption(只適用,當應用程序集中)。

或者使用推送通知:http://blogs.msdn.com/b/jimoneil/archive/2012/10/15/windows-8-notifications-push-notifications.aspx

+0

'bassicHttpBinding'不支持雙工信息交換模式,或者我錯了嗎? – StaWho

+0

對..很抱歉..您需要手動實施輪詢。 – Max

+0

噢..順便說一下..由於WinRT的本質,你應該更好地使用推送通知,而不是輪詢! – Max

0

使用HttpClient的類..這是唯一的簡單的解決方法,並努力爲好。

var httpClient = new HttpClient(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); 
httpClient.DefaultRequestHeaders.Add("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP"); 
var soapXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><GetCityWeatherByZIP xmlns=\"http://ws.cdyne.com/WeatherWS/\"><ZIP>23454</ZIP></GetCityWeatherByZIP></soap:Body></soap:Envelope>"; 
var response = httpClient.PostAsync("http://wsf.cdyne.com/WeatherWS/Weather.asmx", new StringContent(soapXml, Encoding.UTF8, "text/xml")).Result; 
var content = response.Content.ReadAsStringAsync().Result; 

試試這個嗎?我希望這是你正在尋找的 - https://quirkd.wordpress.com/2015/01/24/shorts-consuming-a-wcf-asmx-web-service-in-winrt/

+0

雖然此鏈接可能回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Cyclonecode

+0

好的,完成了.. :)感謝您的建議,儘管鏈接位於我自己的博客,並且不太可能改變。 –

+0

也許你還可以加入一小段代碼來演示這個類的用法。您不必摘錄整篇文章 - 因爲這將首先破壞博客的目的 - 但我們希望儘可能讓自己的答案獨立,並提供更多補充閱讀的鏈接。 – BoltClock