2010-08-19 11 views
12

Tôi Thực hiện IDispatchMessageInspector.AfterReciveRequest Sau đó, tôi cấu hình như thế này:IDIspatchMessageInspector

<configuration> 
    <system.serviceModel> 
    <services> 
     <service 
     name="Microsoft.WCF.Documentation.SampleService" 
     behaviorConfiguration="inspectorBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/SampleService" /> 
      </baseAddresses> 
     </host> 
     <endpoint 
      address="" 
      binding="wsHttpBinding" 
      contract="Microsoft.WCF.Documentation.ISampleService" 
     /> 

     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="inspectorBehavior"> 
      <serviceInspectors /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <extensions> 
     <behaviorExtensions> 
     <add 
      name="serviceInspectors" 
      type="Microsoft.WCF.Documentation.InspectorInserter, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" 
     /> 
     </behaviorExtensions> 
    </extensions> 
    </system.serviceModel> 
</configuration> 

nhưng nó không hoạt động.

tôi kiểm tra trong lắp ráp của tôi và trong tài liệu tham khảo địa phương của tôi và tôi didnt tìm thấy Microsoft.WCF.Documentation.InspectorInserter hoặc HostApplication dll tôi tìm kiếm trong mạng để tải HostApplication dll nhưng tôi thấy không có gì.

Tôi phải làm gì?

Tôi cần triển khai nhiều thứ hơn hoặc chỉ cần cấu hình này.

+0

Cấu hình của bạn chưa hoàn tất. Đăng cấu hình hoàn chỉnh, mã kiểm tra và mã hành vi. Đồng thời xóa hai bài đăng trống đó. –

Trả lời

22

Tôi thấy dễ dàng hơn khi đính kèm triển khai IDispatchMessageInspector của mình bằng cách triển khai IServiceBehavior cũng mở rộng Thuộc tính. Sau đó, trong phương thức ApplyDispatchBehavior, đính kèm trình kiểm tra thư của bạn vào tất cả các điểm cuối trong tất cả các kênh.

article đã giúp tôi rất nhiều.

Ví dụ mã:

public class MyServiceBehavior : Attribute, IServiceBehavior 
{ 
    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, 
     ServiceHostBase serviceHostBase) 
    { 
     foreach(ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers) 
      foreach(EndpointDispatcher eDispatcher in cDispatcher.Endpoints) 
       eDispatcher.DispatchRuntime.MessageInspectors.Add(new RequestAuthChecker()); 
    } 
} 

Sau đó, trong việc thực hiện các hợp đồng dịch vụ, bạn có thể chỉ cần thêm thuộc tính cho lớp.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
[MyServiceBehavior] 
public class ContractImplementation : IServiceContract 
{ 
+26

+1 WCF sẽ hoàn toàn không thể sử dụng được nếu không có StackOverflow :) – Andomar

+0

Yup, thật không may là một số tài liệu xấu đến mức nào. – MonkeyWrench

+1

Tôi nghĩ rằng có một trường hợp kinh doanh tốt cho wcf.stackexchange.com – arcain