2015-10-07 15 views
5

Có thể gọi dịch vụ WCF từ một ứng dụng toàn cầu không?Ứng dụng WCF trong ứng dụng toàn cầu

Tôi đã thêm tham chiếu dịch vụ và proxy được tạo tốt. Nhưng khi tạo một NetTcpBinding lập trình và truyền nó tới constructor của proxy, mô hình dịch vụ sẽ ném ngoại lệ PlatformNotSupported.

Cả hai chạy ứng dụng trong trình mô phỏng và trên máy cục bộ cũng tạo ra cùng một ngoại lệ.

Một ngoại lệ của loại 'System.PlatformNotSupportedException' xảy ra trong System.Private.ServiceModel.dll nhưng không được xử lý theo mã người dùng

"hoạt động này không được hỗ trợ"

EndpointAddress address = new EndpointAddress("net.tcp://test:9000/ServicesHost/PublishService"); 
NetTcpBinding binding = new NetTcpBinding(); 
binding.Security.Mode = SecurityMode.None; 

PublishingService.PublishClient proxy = new PublishingService.PublishClient(binding, address); 

Có ai có ví dụ về máy khách WCF đang hoạt động trong UAP không?

EDIT

Nó có cái gì để làm với các dịch vụ trở thành một dịch vụ duplex!

Hợp đồng gốc:

[ServiceContract(CallbackContract = typeof(IPublishCallback))] 
public interface IPublish { } 

Sau khi loại bỏ các thuộc tính CallbackContract client UAP có thể tạo ra một kết nối, vì vậy cơ bản WCF hoạt động. Vì vậy, tôi đoán tốt hơn là nên thuật lại câu hỏi. Có thể tạo một máy khách WCF duplex WCF trong ứng dụng toàn cầu không?

chỉnh sửa servicemodel cho các máy chủ

<system.serviceModel> 
    <bindings> 
     <netTcpBinding>   
      <binding name="netTcpPublishService" openTimeout="00:00:10" receiveTimeout="infinite"> 
       <reliableSession inactivityTimeout="24.20:31:23.6470000" enabled="true" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </netTcpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehaviour">  
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="serviceBehaviour" name="PublishService.Publish"> 
     <endpoint binding="mexHttpBinding" name="mexPublishService" 
      contract="IMetadataExchange" /> 
     <endpoint address="PublishService" binding="netTcpBinding" bindingConfiguration="netTcpPublishService" 
      name="netTcpPublishService" contract="PublishService.IPublish" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8004/ServicesHost/PublishService" /> 
      <add baseAddress="net.tcp://localhost:9004/ServicesHost/PublishService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 
+0

Có thể, tôi đã thực hiện nó trong ứng dụng của mình (mặc dù không truyền bất kỳ thứ gì cho nhà xây dựng proxy, vì vậy có thể không áp dụng được). – Tobbe

+0

có nằm trong ứng dụng UWP của Windows 10 không? –

Trả lời

0

Vâng, đó là có thể. Đây là cách tôi kết nối trong một ứng dụng mẫu mà tôi đã làm một lúc trước:

using Tradeng.Srvc.Client.WinAppSimple.SrvcRefTradeng; 

private InstanceContext instanceContext; 
private TradengSrvcClientBase serviceProxy; 

      instanceContext = new InstanceContext(this); 
      serviceProxy = new TradengSrvcClientBase(instanceContext); 

      bool result = await serviceProxy.ConnectAsync(); 

      if (result) 
      { 
       // connected... 
      } 

Tôi đã sử dụng liên kết từ tệp cấu hình được tạo khi bạn thêm tham chiếu đến dịch vụ của mình.

Đây là giao diện của ứng dụng. Cắt cạnh thứ ....: O)

https://www.youtube.com/watch?v=YSg6hZn1DpE

Các dịch vụ sẽ tự vận hành như một WebRole trên Azure, bằng cách này.

+0

Nếu có thể, vui lòng đăng một dấu vết ngăn xếp đầy đủ. Có thể có một số ngoại lệ bên trong sẽ đưa ra gợi ý tốt hơn về vấn đề này. – jsanalytics

+0

Đó có phải là dấu vết ngăn xếp đầy đủ không? 'PlatformNotSupportedException' đã đi đâu? – jsanalytics

+0

Một vài điều: 1) Tôi mong đợi một chuỗi ngoại lệ sạch sẽ dẫn đến 'PlatformNotSupportedException', đó không phải là những gì bạn đã thể hiện. 2) Bạn đang tạo proxy của mình theo cách thủ công, điều này là KHÔNG cần thiết và nếu không có gì khác, chỉ làm cho mọi việc trở nên khó khăn hơn so với những gì họ thực sự cần.Tất cả những gì bạn phải làm là đi đến dự án của mình và 'Thêm tham chiếu dịch vụ' và sau đó thêm câu lệnh' using' vào mã của bạn, xem bài đăng cập nhật của tôi. 3) Khi làm việc với WCF, việc bật dịch vụ theo dõi bên là một PHẢI. Và cũng có thể sử dụng công cụ theo dõi dịch vụ theo dõi. Nó cho bạn thấy những chi tiết đáng kinh ngạc về những gì đang diễn ra. – jsanalytics

Các vấn đề liên quan