2013-01-08 23 views
5

Tôi có dịch vụ WCF và ứng dụng Silverlight 5. tôi đã xác định các giao diện sau:Nhận lỗi: Hợp đồng yêu cầu Duplex, nhưng Binding 'BasicHttpBinding' không hỗ trợ nó hoặc không được định cấu hình đúng cách để hỗ trợ nó

[ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IDuplexClient))] 
public interface IDuplexService 
{ 
    [OperationContract] 
    void Subscribe(string userId); 

    [OperationContract] 
    void Unsubscribe(string userId); 
} 

[ServiceContract] 
public interface IDuplexClient 
{ 
    [OperationContract(IsOneWay = true)] 
    void PushNotification(string msg); 
} 

Và đây là file Web.config của tôi:

<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
</configuration> 

Khi tôi cố gắng chạy dịch vụ tôi nhận được:

The service '/ServerService.svc' cannot be activated due to an exception during compilation. The exception message is: Contract requires Duplex, but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.

tôi biết tôi cần phải thêm một số thuộc tính cho Web.config, nhưng bất cứ nơi nào tôi nhìn (và bất cứ điều gì tôi đã cố gắng) Tôi không thể làm cho nó hoạt động.

Tôi mới tham gia WCF và tôi muốn bạn trợ giúp về chủ đề đó. Tất cả googling của tôi dẫn tôi hư không và câu trả lời những người hỏi ở đây cùng một câu hỏi đã không làm việc cho tôi.

Vì vậy, tôi đã quyết định từ bỏ việc tìm kiếm và chỉ yêu cầu.

Cập nhật: tôi đã sử dụng liên kết này để tạo ra các giao diện - http://msdn.microsoft.com/en-us/library/cc645027%28v=vs.95%29.aspx

Trả lời

13

Nếu đó là mức độ cấu hình web.config của bạn cho WCF, sau đó bạn đang thiếu phần định nghĩa hợp đồng của bạn:

<services> 
    <service name="WebApplication1.Service1"> 
    <endpoint address="" binding="wsDualHttpBinding" contract="WebApplication1.IService1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

Nếu bạn đã xác định mục này, nguyên nhân có thể khác là tên hợp đồng không đủ điều kiện; nó phải bao gồm không gian tên đầy đủ và không chỉ là tên của hợp đồng.

Dưới đây là cấu hình System.ServiceModel đầy đủ:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="WebApplication1.Service1"> 
     <endpoint address="" binding="wsHttpBinding" contract="WebApplication1.IService1" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

Trong trường hợp này, không gian tên ứng dụng là WebApplication1, tên lớp của dịch vụ là Service1 (tức Service1.svc) và giao diện mà Service1 thực hiện được IService1 .

+0

Bạn có thể giải thích 'MyService',' MySLServiceBehavior', 'MySLService',' IMyService' và 'IMetadataExchange' là gì không? Điều này không rõ ràng trong con mắt của một người mới bắt đầu. Ngoài ra, tôi không cần phải thêm một số thuộc tính ''? – assafmo

+1

Làm sạch câu trả lời một chút để làm cho nó dễ hiểu hơn và thêm cấu hình đầy đủ. –

+0

Cảm ơn bạn, nhưng tôi vẫn không thấy cấu hình đầy đủ. – assafmo

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