2012-08-23 5 views
3

WCF 웹 서비스를 처음으로 프로젝트로 개발하도록 요청 받았습니다. 웹 서비스는 다소 단순합니다. JSON 객체 만 반환해야합니다. 문제는 브라우저를 사용하여 서비스를 테스트하는 동안 브라우저 (chrome, firefox)가 빈 페이지를 표시한다는 것입니다. WcfTestClient는 JSON 출력을 올바르게 표시합니다. 첨부웹 서비스가 JSON 객체 대신 빈 페이지를 반환합니다.

그래서

내가 무슨 일을하고있는 중이 야 내 코드와의 Web.config

입니까? 미리 감사드립니다.

의 Web.config :

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="WcfService3.Service1" behaviorConfiguration="WcfService3.Service1Behavior"> 
     <!-- Service Endpoints --> 
     <endpoint address="" binding="wsHttpBinding" contract="WcfService3.IService1"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WcfService3.Service1Behavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

IService1.cs :

namespace WcfService3 
{ 
    [ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string GetData(string username, string password); 
    } 

    [DataContract] 
    public class Data 
    { 
     [DataMember] 
     public string Username { get; set; } 

     [DataMember] 
     public string Password { get; set; } 
    } 
} 

Service1.svc.cs :

namespace WcfService3 
{ 
    public class Service1 : IService1 
    { 
     [WebInvoke(Method = "GET", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "data/{user}/{pass}")] 
     public string GetData(string user, string pass) 
     { 
      Data UserData = new Data() 
      { 
       Username = user, 
       Password = pass 
      }; 

      MemoryStream stream = new MemoryStream(); 
      DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Data)); 
      ser.WriteObject(stream, UserData); 
      string json = Encoding.Default.GetString(stream.ToArray()); 
      return json; 
     } 
    } 
} 

답변

1

웹 브라우저에서 사용하려면 wsHttpBinding이 아닌 webHttpBinding을 구현해야합니다. 구성에도

<services> 
    <service name="WcfService3.Service1" behaviorConfiguration="WcfService3.Service1Behavior"> 
    <!-- Service Endpoints --> 
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webBehavior" contract="WcfService3.IService1"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 

:

<endpointBehaviors> 
    <behavior name="webBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
1

는 다음을보십시오 :

namespace WcfService3 
{ 
    public class Service1 : IService1 
    { 
     [WebInvoke(Method = "GET", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "data/{user}/{pass}")] 
     public Data GetData(string user, string pass) 
     { 
      Data UserData = new Data() 
      { 
       Username = user, 
       Password = pass 
      }; 

      return UserData; 
     } 
    } 
} 

응답 형식을 Json으로 정의하면 Wcf 서비스가 반환 개체를 Json으로 변환합니다. (내가 맞다면)

관련 문제