[英]WCF OperationBehavior: ApplyDispatchBehavior not being called
我的目標是為WCF創建endpointbehavior,它會向現有合同添加額外的Ping()
操作。 EndpointBehavior
運行正常,當我運行我的服務並使用WCF測試客戶端時,我實際上可以看到添加的Ping()
操作。 我已經實現了這個endpointbehavior,如下所示:
組態:
<configuration>
<system.serviceModel>
<services>
<service name="X">
<endpoint address="mex" kind="mexEndpoint" />
<endpoint address="" binding="basicHttpBinding" contract="IX"
behaviorConfiguration="ping" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="ping">
<PingEndpointBehavior />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="PingEndpointBehavior"
type="Assembly.PingEndpointBehavior, Assembly, .. />
<behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>
端點行為:
public class PingEndpointBehavior : BehaviorExtensionElement, IEndpointBehavior
{
...
public void ApplyDispatchBehavior(ServiceEndpoint endpoint,
EndpointDispatcher endpointDispatcher)
{
var cd = endpoint.Contract;
var inputMessage = new MessageDescription(...);
var outputMessage = new MessageDescription(...);
// Set input/output messages correctly
var od = new OperationDescription("Ping", cd);
od.Messages.Add(inputMessage);
od.Messages.Add(outputMessage);
od.Behaviors.Add(new DataContractSerializerOperationBehavior(od));
od.Behaviors.Add(new PingOperationBehavior());
endpoint.Contract.Operations.Add(od);
}
...
}
操作行為但是, 不工作。 操作行為上的ApplyDispatchBehavior()
方法永遠不會被調用,因此,我不使用自己的PingInvoker
。 這導致在向合同調用添加的Ping()
操作時沒有得到響應。
這樣做的原因似乎是OperationBehavior
僅在服務已經啟動后添加,導致ApplyDispactchBehavior
不被調用。 見下面的代碼:
操作行為:
public class PingOperationBehavior : IOperationBehavior
{
...
public void ApplyDispatchBehavior(OperationDescription od, DispatchOperation do)
{
do.Invoker = new PingInvoker();
}
...
}
祈求:
public class PingInvoker : IOperationInvoker
{
...
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
outputs = new object[0];
return Ping();
}
public static DateTime Ping()
{
return DateTime.Now;
}
...
}
任何人都知道如何讓OperationBehavior
正常工作?
注意:
我的自定義行為也遇到了同樣的問題。 我是從WebHttpBehavior派生的(它繼承自IEndpointBehavior),但是沒有調用ApplyDispatchBehavior。
我的問題的解決方案是添加缺少的覆蓋關鍵字,如:public override void ApplyDispatchBehavior(...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.