4

jquery コードを WCF で動作させようとしています。私は非常に単純なことから始めています。WCF サービスは IIS でホストされます。シンプルなインターフェースとシンプルな実装を備えています。以下は私のWCFコードです。

 [ServiceContract]
 public interface IEvalService
  {
    [OperationContract]
    [WebInvoke(Method = "GET", UriTemplate = "GetId",
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    string GetId();
  }

上記のインターフェイスの実装は次のとおりです。

[AspNetCompatibilityRequirements(RequirementsMode=
AspNetCompatibilityRequirementsMode.Allowed)]
public class EvalService: IEvalService
{

    public string GetId()
    {
        BenchMarkStatus benchMarkStatus = new BenchMarkStatus();         
        return benchMarkstatus.Name;
    }
}

もちろん、次のようなbenchMarkクラスがあります。

[DataContract]
public class BenchMarkStatus
{
    private string _name;

    public BenchMarkStatus()
    {
        _name = "Sudarshan";
    }

    [DataMember]
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }
}

Web サービスの構成ファイルは次のとおりです。

<services>
  <service name="BenchMarkServiceLiabrary.EvalService">
    <endpoint address="10.66.26.171"         
              binding="webHttpBinding"
              contract="BenchMarkServiceLiabrary.IEvalService"  
              behaviorConfiguration="WEB" />
   </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WEB">
      <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" 
                           aspNetCompatibilityEnabled="true" />

クライアント側には、次のコードがあります。

$.ajax({
          type: 'GET',
          url: "http://10.66.26.171/EvalService/Eval.svc/GetId?callback=?",
          contentType: "json/application; charset=utf-8",
          dataType: "jsonp",
          jsonpCallback: 'jsonCallback',
          success: function (data) { alert(data) }
      });
function jsonCallback() {
          alert("me");
}

404 エラーが発生します。最初はクロス ドメインに問題がありましたが、現在はクライアント コードから GetId 関数にアクセスできません。誰か助けてくれませんか?

4

2 に答える 2

0

あなたの問題は、web.configのサービスのアドレス部分です

iis でホスティングしているため、サービスは次の場所で利用できます。

http://localhost/EvalService/Eval.svc(iis がローカルで実行されている場合は localhost、そうでない場合はリモート iis の IP またはアドレス)

これは、web.config にアドレス部分を追加していない場合、サービスのエンドポイントのアドレスになります。追加されたアドレス部分は、そのエンドポイントを見つけることができますhttp://localhost/EvalService/Eval.svc/10.66.26.171

エンドポイントが 1 つしかない場合は、サービス構成で address="" を安全に省略または指定して、次のアドレスでサービスにアクセスできますhttp://localhost/EvalService/Eval.svc

 <service name="BenchMarkServiceLiabrary.EvalService">
    <endpoint address=""         
              binding="webHttpBinding"
              contract="BenchMarkServiceLiabrary.IEvalService"  
              behaviorConfiguration="WEB" />
   </service>
于 2014-05-09T13:58:32.220 に答える
-1

StackOverflow はいくつかの古い質問を提案します。今までに WebAPI に移行していただければ幸いです。WebAPI の方がはるかに簡単です。wcf サービスをセットアップしようとするたびに、それは戦いでした。しかし、質問に関しては; 少し前に非常によく似た問題があり、EndpointBehaviors に追加することで解決しました。

endPointBehaviors を次のように更新してみてください

<endpointBehaviors>
    <behavior name="WEB">
      <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"/>
      <enableWebScript />
    </behavior>
</endpointBehaviors>
于 2014-05-09T13:42:31.563 に答える