我正在尝试使用路由服务(http://msdn.microsoft.com/en-us/library/ee517422.aspx)将数据从客户端路由到其他端点。我有多个客户端,从路由服务调用的端点位于第三方。
我还需要将通过路由服务传递的每个事务记录到SQL数据库中。
问题是我无法在路由服务中编写自定义代码,因为它在配置文件中工作。鉴于我无法在这些类中编写自定义代码,我该如何实现呢?
答案 0 :(得分:1)
1)创建一个类库并使用强键对其进行签名。
2)创建RoutingServiceBehavior类这个类将实现IServiceBehavior,IDispatchMessageInspector接口,消息拦截的代码将在这个类中:using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
namespace Services.RoutingServiceBehavior
{
public class RoutingServiceBehavior : IServiceBehavior, IDispatchMessageInspector
{
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
// This is your envelop
string s = request.ToString();
return null;
}
public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers)
{
foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this);
}
}
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
}
}
3)创建RoutingServiceBehaviorElement类,这个类将实现BehaviorExtensionElement接口:
using System;
using System.ServiceModel.Configuration;
namespace Services.RoutingServiceBehavior
{
public class RoutingServiceBehaviorElement : BehaviorExtensionElement
{
public override Type BehaviorType
{
get { return typeof(RoutingServiceBehavior); }
}
protected override object CreateBehavior()
{
return new RoutingServiceBehavior();
}
}
}
4)建立你的项目
5)将您的组件添加到GAC
6)打开machine.config并在<behaviorExtensions>
下添加程序集的名称,它应该是这样的:
<add name="RoutingServiceBehavior" type="Services.RoutingServiceBehavior.RoutingServiceBehaviorElement, Services.RoutingServiceBehavior, Version=1.0.0.0, Culture=neutral" />
7)在<serviceDebug>
<RoutingServiceBehavior/>
8)确保程序集dll包含在WCF服务中。