.net 为什么每次请求都会调用我的WCF ServiceAuthorizationManager两次?
我在我的WCF服务中实现了ServiceAuthorizationManager,该服务在服务器2k8上的IIS 7.5下运行。对于每个传入请求,将调用CheckAccessCore函数两次。第一次调用CheckAccessCore时,授权标头就在那里,并且用户已通过身份验证。第二次调用CheckAccessCore时,授权标头为空,身份验证明显失败。为什么会发生第二部分 间隔:.net 为什么每次请求都会调用我的WCF ServiceAuthorizationManager两次?,.net,wcf,authentication,iis,.net,Wcf,Authentication,Iis,我在我的WCF服务中实现了ServiceAuthorizationManager,该服务在服务器2k8上的IIS 7.5下运行。对于每个传入请求,将调用CheckAccessCore函数两次。第一次调用CheckAccessCore时,授权标头就在那里,并且用户已通过身份验证。第二次调用CheckAccessCore时,授权标头为空,身份验证明显失败。为什么会发生第二部分 间隔: <OperationContract()> <WebInvoke(UriTemplate:="",
<OperationContract()>
<WebInvoke(UriTemplate:="", Method:="POST", BodyStyle:=WebMessageBodyStyle.Bare)>
Function ProcessMessage(ByVal value As Stream) As Stream
函数ProcessMessage(ByVal值作为流)作为流
web.config:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyDataService" />
</basicHttpBinding>
<webHttpBinding>
<binding name="RestSSL">
<security mode="Transport">
</security>
</binding>
</webHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/OtherSvcLib/Service1/"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyDataService"
contract="DataService.IMyDataService" name="BasicHttpBinding_IMyDataService" />
</client>
<services>
<service name="MyServiceLib.MyHubSvcLib" behaviorConfiguration="gogogo">
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="RestSSL"
behaviorConfiguration="RestSvcBehavior"
contract="MyServiceLib.IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://mydomain.com/MyServiceLib/MyHub.svc" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="gogogo">
<serviceAuthorization serviceAuthorizationManagerType="MyServiceLib.clsCustomAuthManager, MyServiceLib">
</serviceAuthorization>
<serviceMetadata httpsGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="RestSvcBehavior">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
我解决了这个问题。看起来可能IIS不喜欢我界面中模棱两可的(?)uriTemplate,正在转发或重定向请求,或者可能是其他原因,我不会再花时间调查它了。我只是简单地将“/”添加到客户机的uriTemplate和URL中 不工作:(请求mydomain.com/service.svc)
函数ProcessMessage(ByVal值作为流)作为流
是否有效:(请求mydomain.com/service.svc/)请注意UriTemplate中的“/”
函数ProcessMessage(ByVal值作为流)作为流
您是如何发现同一个请求被调用了两次的?@usr每当调用该方法时,我就开始将标题内容写入文本文件。您确定您的服务只被调用一次吗?它是通过HttpWebRequest从我扔在一起的一个小winform测试客户端调用的。非常确定该方法只触发一次。
<OperationContract()>
<WebInvoke(UriTemplate:="", Method:="POST", BodyStyle:=WebMessageBodyStyle.Bare)>
Function ProcessMessage(ByVal value As Stream) As Stream
<OperationContract()>
<WebInvoke(UriTemplate:="/", Method:="POST", BodyStyle:=WebMessageBodyStyle.Bare)>
Function ProcessMessage(ByVal value As Stream) As Stream