예, IIS에서 호스팅되는 서비스의 동작을 추가 할 수 있습니다. 비헤이비어는 서비스의 호스팅 환경과 관련이 없습니다. Carlos Figueira의 블로그는 서비스, 엔드 포인트, 계약 및 운영에 적용 할 수있는 모든 유형의 행동의 예를 제공합니다. 내 서비스를 위해 노력 샘플 코드는 IIS에서 호스팅 (web.config 파일에 정의 된 엔드 포인트와 함께) -
- 구성 파일은 여기
public class MyEndpointBehavior : BehaviorExtensionElement, IEndpointBehavior
{
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
Console.WriteLine("applying dispatch behavior");
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new MyInspector());
endpointDispatcher.DispatchRuntime.OperationSelector = new MyOperationSelector();
}
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
public override Type BehaviorType
{
get { return this.GetType(); }
}
protected override object CreateBehavior()
{
return new MyEndpointBehavior();
}
}
public class MyOperationSelector : IDispatchOperationSelector
{
public string SelectOperation(ref Message message)
{
Console.WriteLine("good luck");
string action = message.Headers.Action;
return action.Substring(action.LastIndexOf('/') + 1);
}
}
public class MyInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
return (Message) request;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
}
}
}
행동
구성 파일이 확장 요소로 추가 ExtensionElement으로 동작을 추가 할 필요가
<system.serviceModel>
<services>
<service name="RouteToServiceA.Service1">
<endpoint address="Service1" binding="basicHttpBinding" contract="RouteToServiceA.IService1" behaviorConfiguration="testEndPoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="testEndPoint">
<testBehavior />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="testBehavior" type="RouteToServiceA.MyEndpointBehavior, RouteToServiceA" />
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Carlos Figueira의 블로그 - 코드 샘플을 사용하여 WCF 확장성에 대한 좋은 시리즈를 제공합니다 - [WCF Extensibility] (http://blogs.msdn.com/b/carlosfigueira/) archive/2011/03/14/wcf-extensibility.aspx) – Tim
WCF의 초보자 인 블로그를보고 있습니다. 정확한 경로를 취하고 있는지 여부를보고 싶습니다. –