2012-08-17 93 views
0

当我通过网站IIS7主办我的WCF服务,该方法AfterReceiveRequest得到称为。是WCF AfterReceiveRequest没有得到所谓的

请帮助..

感谢

public class CultureMessageInspector : IClientMessageInspector, IDispatchMessageInspector 
{ 
    private const string HeaderKey = "culture"; 
    #region IDispatchMessageInspector Members 

    public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) 
    { 
     int headerIndex = request.Headers.FindHeader(HeaderKey, string.Empty); 
     if (headerIndex != -1) 
     { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo(request.Headers.GetHeader<String>(headerIndex)); 
     } 
     return null; 
    } 

    public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) 
    { 
    } 

    #endregion 

    #region IClientMessageInspector Members 

    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState) 
    { 
    } 

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel) 
    { 
     request.Headers.Add(MessageHeader.CreateHeader(HeaderKey, string.Empty, Thread.CurrentThread.CurrentCulture.Name)); 
     return null; 
    } 

    #endregion 
} 

我的行为扩展类,Service.svc和配置设置如下:

<system.serviceModel> 
    <services> 
     <service name="C:\Visual Studio 2010\WebSites\WCFService8"> 
     <endpoint binding="netTcpBinding" bindingConfiguration="" behaviorConfiguration="Default" contract="CultureServer.IHelloWorld" /> 
     </service> 
    </services> 
    <behaviors> 

     <endpointBehaviors> 
     <behavior name="Default"> 
      <CultureExtension/> 
     </behavior> 
     </endpointBehaviors> 

     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <extensions> 
     <behaviorExtensions> 
     <add name="CultureExtension" type="Extension.CultureBehaviorExtension, Extension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </behaviorExtensions> 
    </extensions> 

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 


public class CultureBehaviorExtension : BehaviorExtensionElement 
{ 
    // BehaviorExtensionElement members 
    public override Type BehaviorType 
    { 
     get { return typeof(CultureBehaviour); } 
    } 

    protected override object CreateBehavior() 
    { 
     return new CultureBehaviour(); 
    } 
} 


<%@ ServiceHost Language="C#" Debug="true" Service="CultureServer.Server"%> 
+0

你是怎么知道它没有被调用的?你看到在附加的调试器? – 2012-08-17 01:26:40

+0

我附加到iis托管服务的Web进程,并逐步完成代码。 – 2012-08-17 16:25:16

回答

1
<services> 
    <service name="C:\Visual Studio 2010\WebSites\WCFService8"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="" behaviorConfiguration="Default" contract="CultureServer.IHelloWorld" /> 
    </service> 
</services> 

name属性为<service>标记是错误的。它应该有类名,而不是路径。尝试用下面的代码替换它。

<services> 
    <service name="CultureServer.Server"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="" behaviorConfiguration="Default" contract="CultureServer.IHelloWorld" /> 
    </service> 
</services> 
+0

嗨,卡洛斯我一直在关注你的wcf教程PluralSight。他们都是伟大的。但到目前为止,我无法得到这个工作。我现在会尝试这种方法,看看它是否有效。谢谢 – 2012-08-17 16:18:42

+0

嗨卡洛斯这没有奏效。请帮助我..谢谢 – 2012-08-17 16:24:39

+0

卡洛斯,如果我用classname替换name属性并取出路径,当我在VS上本地浏览.svc文件时出现错误。 – 2012-08-17 16:31:47

相关问题