2012-08-17 79 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