小编use*_*242的帖子

使用IClientMessageInspector编辑WCF服务的SOAP

在我的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)

wcf soap

14
推荐指数
1
解决办法
2万
查看次数

WCF OperationContract具有松散类型的参数

我想在我的Web方法中使用松散类型的参数.

我有一个场景,客户端可以将任何25个DataContract对象发送到WCF操作,例如

proxy1.myFunction(PersonObject)
proxy1.myFunction(ComputerObject)
Run Code Online (Sandbox Code Playgroud)

我的限制是应该只有一个操作合同暴露给客户.

如何设计一个可以将25个DataContract类中的任何一个作为参数的Web方法?我尝试使用objectas类型的参数并赋予KnownTypeDataContract类属性,但在序列化过程中我没有运气.

c# wcf operationcontract

4
推荐指数
1
解决办法
2829
查看次数

标签 统计

wcf ×2

c# ×1

operationcontract ×1

soap ×1