2014-09-04 6 views
0

몇 가지 ASP.NET 웹 사이트가 있고 멤버쉽 공급자로 WCF 서비스를 설정하려고합니다. WCF 서비스가 모든 회원/역할 세부 정보를 처리하도록합니다. 로그인/로그 아웃하면 자동으로 다른 사람과 로그인/로그 아웃되므로 모두이 서비스를 사용하므로 각 사이트가 아닌 개별적으로 코드를 한 곳에서 관리하고 싶습니다. 서비스는 여전히 표준 Sql 멤버 자격 공급자를 사용합니다. 나는 웹 사이트에서WCF 멤버쉽 공급자가 오류를 발생시킵니다. content type 'application/json; charset = utf-8 '이 예상 유형이 아니 었습니다'application/soap + xml; charset = utf-8 '

Membership.ValidateUser(username, password); 

를 호출 할 때

나는 제목에 오류가 발생합니다. 서비스 또는 클라이언트에서 컨텐트 유형을 지정하는 방법이 있습니까?

서버의 app.config :

<connectionStrings> 
    <clear/> 
    <add name="LocalSqlServer" connectionString="SQL_Db_With_Membership_info" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

<system.web> 
    <membership defaultProvider="SqlMembershipProvider"> 
    <providers> 
     <clear/> 
     <add name="SqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="LocalSqlServer" /> 
    </providers> 
    </membership> 
</system.web> 

<system.serviceModel> 
    <services> 
    <service behaviorConfiguration="AspNetMembership" 
     name="Login.LoginService"> 
     <endpoint address="" binding="wsHttpBinding" 
       bindingConfiguration="LoginBinding" 
       name="LoginEndpoint" 
       contract="Login.ILoginService"> 
     </endpoint> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8733/Design_Time_Addresses/Membership/MembershipService/" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="AspNetMembership"> 
     <serviceCredentials> 
     <serviceCertificate findValue="CN=tempCert" /> 
     <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
           membershipProviderName="SqlMembershipProvider" /> 
     </serviceCredentials> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 

    <bindings> 
    <wsHttpBinding> 
     <binding name="LoginBinding"> 
     </binding> 
    </wsHttpBinding> 
    </bindings> 
</system.serviceModel> 

서버 계약 : Web.config의에서 클라이언트 측에서 다음

[ServiceContract] 
public interface ILoginService 
{ 
    [OperationContract] 
    bool ValidateUser(string username, string password); 
} 

public class LoginService : ILoginService 
{ 
    public bool ValidateUser(string username, string password) 
    { 
     return Membership.ValidateUser(username, password); 
    } 
} 

: 내가 원하는 무엇

<system.web> 
    <membership defaultProvider="ClientAuthenticationMembershipProvider"> 
    <providers> 
     <clear/> 
     <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="http://localhost:8733/Design_Time_Addresses/Membership/MembershipService/" /> 
    </providers> 
    </membership> 
</system.web> 

<system.serviceModel> 
    <bindings> 
    <wsHttpBinding> 
     <binding name="LoginEndpoint" /> 
    </wsHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost:8733/Design_Time_Addresses/Membership/MembershipService/" binding="wsHttpBinding" bindingConfiguration="LoginEndpoint" contract="LoginService.ILoginService" name="LoginEndpoint" > 
    </endpoint> 
    </client> 
</system.serviceModel> 

로그인 페이지 코드에서 Membership.ValidateUser를 호출하여 다음과 같이 사용자를 로그인하십시오.

protected void L1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    // THIS IS WHERE THE ERROR HAPPENS 
    Membership.ValidateUser(L1.UserName, L1.Password); 
} 

강제로 서버가 Json을 수락하도록하거나 클라이언트가 XML을 보내도록 강제 할 수 있습니까?

답변

1

당신의 [OperationContract를] 속성 후에도 도움이 같은 오류가 발생하는 것 같지 않았어요이

[WebInvoke(Method = "GET", 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json] 
+0

같은

뭔가를 [WebInvoke의] 속성을 추가하려고합니다. – RossD