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

如果您只有一个端点,您可以安全地在服务配置中省略或仅使用 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,这要容易得多。每次我尝试设置 wcf 服务时,都是一场斗争。但是关于这个问题;前段时间我有一个非常相似的问题,添加到 EndpointBehaviors 为我解决了这个问题。

尝试将您的 endPointBehaviors 更新为以下

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