我通过一个Microsoft培训包(WCF)中的示例工作。它需要向服务添加消息检查。
到目前为止,我已经创建了检查实现类、消息行为类和消息行为类扩展。
而不是通过配置文件添加的行为,我想添加它在服务主机文件。下面是实现类…
public class MessageTrace : IDispatchMessageInspector
{
private Message TraceMessage(MessageBuffer buffer)
{
Message msg = buffer.CreateMessage();
StringBuilder sb = new StringBuilder("Message content");
sb.Append(msg.ToString());
Console.WriteLine(sb.ToString());
return buffer.CreateMessage();
}
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
request = TraceMessage(request.CreateBufferedCopy(Int32.MaxValue));
return null;
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
reply = TraceMessage(reply.CreateBufferedCopy(Int32.MaxValue));
}
}
public class TraceMessageBehavior : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
MessageTrace inspector = new MessageTrace();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
}
public void Validate(ServiceEndpoint endpoint)
{}
}
public class TraceMessageBehaviorExtension : BehaviorExtensionElement
{
public override Type BehaviorType
{
get { return typeof(TraceMessageBehavior); }
}
protected override object CreateBehavior()
{
return new TraceMessageBehavior();
}
}
2条答案
按热度按时间p3rjfoxz1#
你可以通过以下方式使用代码来实现。
1.首先,在服务类上使用属性。创建一个新的从IServiceBehavior继承的属性。
然后使用此属性装饰您的服务类
1.创建从IServiceBehavior扩展的ServiceBehavior,代码与上面相同,只删除属性。
然后在ServiceHost中以编程方式添加Behavior。
7xllpg7q2#
我可以简单地使用以下命令添加端点行为:
因此,我在应用程序配置中定义了扩展和endpointBehavior,但端点是在源文件中定义的。因此,我想在源文件中添加endpointBehavior。