2011-09-28 27 views
22

Tôi đã tạo một dịch vụ WCF đang hoạt động. Bây giờ tôi muốn thêm một số bảo mật cho nó để lọc địa chỉ IP. Tôi đã làm theo các ví dụ mà microsoft xuất bản trong các mẫu để thử và thêm một IDispatchMessageInspector sẽ nâng cao một cuộc gọi AfterReceiveRequest và sau đó ném một lỗi nếu địa chỉ ip không phải là từ danh sách cho phép.Tại sao dịch vụ WCF của tôi cung cấp thông báo 'không có sự ràng buộc với None MessageVersion'?

Sau khi xem mã; họ đã cấu hình nó bằng cách sử dụng 'wsHttpBinding', tuy nhiên tôi muốn sử dụng 'webHttpBinding' hoặc 'basicHttpBinding'. Nhưng khi tôi đặt nó lên tôi nhận được lỗi:

The endpoint at 'http://upload/api/Api.svc/soap' does not have a Binding with the None MessageVersion. 'System.ServiceModel.Description.WebHttpBehavior' is only intended for use with WebHttpBinding or similar bindings.

cấu hình của tôi là:

<system.serviceModel> 


    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"> 
    </serviceHostingEnvironment> 
    <!--Set up the service--> 
    <services> 
     <service behaviorConfiguration="SOAPRESTDemoBehavior" name="HmlApi"> 
     <endpoint address="rest" binding="webHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" /> 
     <endpoint address="soap" binding="basicHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" /> 
     </service> 
    </services> 

    <!--Define the behaviours--> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SOAPRESTDemoBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 

     <!---Endpoint --> 
     <endpointBehaviors> 
     <behavior name="SOAPRESTDemoEndpointBehavior"> 
      <ipFilter/> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

    <extensions> 
     <behaviorExtensions> 
     <add name="ipFilter" type="VLSCore2.Api.IpFilterBehaviourExtensionElement, VLSCore2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </behaviorExtensions> 
    </extensions> 

    </system.serviceModel> 

Vì vậy, những gì im tự hỏi là làm thế nào tôi có thể thiết lập thanh tra thông điệp của tôi mà không sử dụng WebHttpBinding. Điều này thậm chí có thể?

Tôi muốn sử dụng SOAP 'basicHttpBinding' không wsHttpBinding (và tất cả các WS *) các chi phí liên quan đến ....

Trả lời

35

này chỉ đơn giản là đang xảy ra bởi vì bạn đã cấu hình một endpointBehavior duy nhất cho cả SOAP và REST điểm cuối nhưng điểm cuối SOAP không thể có hành vi webHttp. Bạn cần phải chia những ngoài để họ là:

<endpointBehaviors> 
    <behavior name="SOAPDemoEndpointBehavior"> 
     <ipFilter/> 
    </behavior> 
    <behavior name="RESTDemoEndpointBehavior"> 
     <ipFilter/> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 

và sau đó thiết bị đầu cuối của bạn nên là:

<endpoint address="rest" binding="webHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="RESTDemoEndpointBehavior" /> 
    <endpoint address="soap" binding="basicHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPDemoEndpointBehavior" /> 
+0

Cảm ơn rất nhiều này là chỗ trên. Công bằng để nói rằng tôi nghĩ rằng điều quan trọng là phải thiết lập tất cả các điểm cuối chính xác cho một dịch vụ ngay bây giờ! – Exitos

+0

Người đàn ông tôi đã đấu tranh cho một vài giờ đã và tôi đến đây để nhận thấy rằng tôi đã không thay đổi ràng buộc :))) Tôi đã sử dụng cơ bản cho http yêu cầu từ một ứng dụng di động ... thumb up + – dpaul1994

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