在mvc中使用WCF服务时出现问题

时间:2016-08-22 06:31:15

标签: asp.net-mvc wcf csla

我有一个CSCF的WCF项目,我已经在我的IIS服务器中发布了这个服务和MVC应用程序,但是当从Web应用程序调用服务时它会抛出一个错误

  

System.ServiceModel.Security.SecurityNegotiationException:调用者未经过服务身份验证。 ---> System.ServiceModel.FaultException:无法满足安全令牌请求,因为身份验证失败。

这是我的服务web.config

<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="Csla.Server.Hosts.WcfPortal" behaviorConfiguration="returnFaults">
        <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IWcfPortal" contract="Csla.Server.Hosts.IWcfPortal" />
      </service>
      <service name="Csla.Server.Hosts.Mobile.WcfPortal" behaviorConfiguration="returnFaults">
        <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IWcfPortal" contract="Csla.Server.Hosts.Mobile.IWcfPortal" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding_IWcfPortal" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647">
          <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647" maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" maxDepth="2147483647" />
        </binding>
      </basicHttpBinding>
      <wsHttpBinding>
        <binding name="wsHttpBinding_IWcfPortal" maxReceivedMessageSize="2147483647">
          <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647" maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" maxDepth="2147483647" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="returnFaults">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

我已经在我的MVC web.config中使用了这个服务。

<add key="CslaAuthentication" value="Csla" /> 
<add key="CslaDataPortalProxy" value="Csla.DataPortalClient.WcfProxy, Csla" /> 
<add key="CslaDataPortalUrl" value="http://www.someurl.net/WcfFullPortal.svc" />

然后,在我直接从我的服务项目调用服务后,这工作正常。

<add key="CslaDataPortalUrl" value="http://localhost:11170/WcfFullPortal.svc" />

并尝试使用已发布的IP地址,这也正常工作

<add key="CslaDataPortalUrl" value="http://10.4.56.75/WcfFullPortal.svc" />

仅在使用已发布的主机名(http://www.someurl.net/WcfFullPortal.svc)时出现问题。我已经通过正在运行的浏览器打开了这个URL。

2 个答案:

答案 0 :(得分:0)

在web.config <system.serviceModel>部分的部分后面添加以下绑定配置。

    <bindings>
        <wsHttpBinding>
           <binding name="TheBindingConfig">
               <security mode="None" />
          </binding>
        </wsHttpBinding>
    </bindings>

答案 1 :(得分:0)

只需将Csla.DataPortalClient.WcfProxy更改为Csla.DataPortalClient.HttpProxy<add key="CslaDataPortalUrl" value="http://www.someurl.net/WcfFullPortal.svc" /><add key="CslaDataPortalUrl" value="http://www.someurl.net/DataPortal/PostAsync" />

并添加

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
        {
            HttpContext.Current.User = new Csla.Security.UnauthenticatedPrincipal();
        }

在Global.asax.cs