3

初めてプロジェクトとしてWCFWebサービスの開発を依頼されました。Webサービスはかなり単純で、JSONオブジェクトを返すだけです。問題は、ブラウザ(chrome、f irefox)が、ブラウザを使用してサービスをテストしようとしているときに空白のページを表示することです。WcfTestClientは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;
        }  
    }
}
4

2 に答える 2

1

Web ブラウザーで使用するには、wsHttpBinding ではなく、または 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> 
于 2012-08-23T15:02:59.970 に答える
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 に変換します。(私が正しければ)

于 2012-08-23T15:02:45.010 に答える