在我的WCF服务中,我想编辑IClientMessageInspector的BeforeSendRequest和AfterReceiveReply中的SOAP.
我创建了一个这样的自定义行为:
public class MyBehavior : BehaviorExtensionElement, IEndpointBehavior
{
}
Run Code Online (Sandbox Code Playgroud)
在MyBehavior类中,我实现了IEndpointBehavior方法,如下代码所示:
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
MyInspector inspector = new MyInspector();
clientRuntime.MessageInspectors.Add(inspector);
}
Run Code Online (Sandbox Code Playgroud)
MyInspector只是继承自IClientMessageInspector的类.
现在,我的问题是:IEndpointBehavior的ApplyClientBehavior没有被触发.但是在wcf客户端,当我添加MyBehavior类所在项目的引用时,在客户端写下代码:
c.Endpoint.Behaviors.Add(new MyBehavior());
Run Code Online (Sandbox Code Playgroud)
它工作正常.我的意思是Apply Client Behavior方法被触发了.
我不想让我的客户手动添加此行为,我希望这是自动发生的.我怎么能得到这个?
这是完整的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;
using System.IO;
namespace MethodChangeService
{
public class MyInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
XmlDocument doc = new XmlDocument();
MemoryStream ms = new …Run Code Online (Sandbox Code Playgroud) 我想在我的Web方法中使用松散类型的参数.
我有一个场景,客户端可以将任何25个DataContract对象发送到WCF操作,例如
proxy1.myFunction(PersonObject)
proxy1.myFunction(ComputerObject)
Run Code Online (Sandbox Code Playgroud)
我的限制是应该只有一个操作合同暴露给客户.
如何设计一个可以将25个DataContract类中的任何一个作为参数的Web方法?我尝试使用objectas类型的参数并赋予KnownTypeDataContract类属性,但在序列化过程中我没有运气.