0

在过去的 4 个小时里,我一直在查看我能找到的关于这个问题的任何帖子,所以我现在可能有点盲目 ;-)

我正在尝试使用 jQuery 调用一个简单的 WCF 服务。我已经使用 WebMethods 一段时间了,我正在尝试迁移一些。我正在尝试使用您可以想象的最简单的网络服务进行测试:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ForumOperationService : IForumOperationService
{
    public string Horse(string prefixText, int count)
    {
        return "hestWCF";
    }
}

我的 jQuery 调用:

 $(document).ready(function () {
            var hest;
            $.ajax({
                type: "POST",
                datatype: "application/json",
                url: "Services/ForumOperationService.svc/Horse",
                data: { prefixText: 'a', count: 10 },
                success: function (data) {
                    hest = data;
                }
            });
        });

我的 web.config 是这样的:

 <system.webServer>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ServiceAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
      <service name="ForumOperationService">
        <endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior"
            binding="webHttpBinding" contract="IForumOperationService" />
      </service>
    </services>
    .... (more stuff)

在 Firebug 中,我收到以下错误:

NetworkError:500 内部服务器错误 - http://localhost:21599/Client/Services/ForumOperationService.svc/Horse

有任何想法吗?

更新

刚刚运行 WCF 测试客户端,得到了这个错误:

ForumOperationService 类型的服务类既定义了一个ServiceContract,又从IForumOperationService 类型继承了一个ServiceContract。契约继承只能在接口类型之间使用。ÿ 如果一个类用 ServiceContractAttribute 标记,它必须是层次结构中唯一具有 ServiceContractAttribute 的类型。ÿ考虑将 IForumOperationService 类型上的 ServiceContractAttribute 移动到 IForumOperationService 类型实现的单独接口。

明天会跟进。

4

1 回答 1

1

使用 WCFTestClient(.exe) 测试该方法并确认该方法工作正常,否则您将收到实际错误。

如果您的方法参数足够简单,WCFTestClient 是在从应用程序代码开始使用它之前进行测试的快速方法。

于 2012-10-14T15:00:39.713 回答