Web服务不再适用于单元测试/客户端代理创建

时间:2011-12-05 13:24:37

标签: c# .net wcf web-services .net-4.0

我添加了以下服务配置,以允许通过Ajax调用我的方法。

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webHttpBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
            <behavior name="ServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <webHttpBinding>
            <binding name="webHttpXDomain" crossDomainScriptAccessEnabled="true" />
        </webHttpBinding>
    </bindings>
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="My.Service.AccountService">
            <endpoint address="" behaviorConfiguration="webHttpBehavior"
                binding="webHttpBinding" bindingConfiguration="webHttpXDomain"
                name="Scripting" contract="My.Service.ServiceContracts.IAccountService" />
        </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

但是现在当我尝试使用WCF测试客户端或运行我的单元测试时,它表示没有端点监听或没有任何东西。 ajax客户端工作正常。

4 个答案:

答案 0 :(得分:2)

首先,REST不会公开元数据。所以我认为你不能这样打电话。

其次,对于单元测试,真的需要像客户端调用一样调用吗?为什么不能通过创建单元测试项目来单独测试服务器端?

我们的情况与我们的项目使用Azure和Mobile客户端并使用VS测试项目成功进行单元测试的情况相同。

负载测试是..我们需要模拟来自客户端的呼叫。

答案 1 :(得分:1)

这里的问题是webHttpBinding不是SOAP绑定。它确实是为REST服务而设计的,默认情况下webHttpBinding无法公开元数据(这解释了WCF测试客户端问题)。

您可以在此处找到有关webHttpBindings的更完整答案:http://social.msdn.microsoft.com/forums/en-US/wcf/thread/deabd25b-a219-4e95-9826-d40dc2f75543

对于单元测试(虽然听起来更像是对我的集成测试),但您需要针对测试方法进行特定设置:

[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("%PathToWebRoot%\\VSProjects", "/VSProjects")]
[UrlToTest("http://localhost/VSProjects")]
public void MethodToTest()
{
}

更多信息:http://msdn.microsoft.com/en-us/library/ms243399.aspx

答案 2 :(得分:0)

请参阅following link for your test setup。特别是文章的最后一点。

Get this wrong and you will get the following error:

System.InvalidOperationException : Service ‘Test.SomeDir.FooService’ has zero application (non-infrastructure) endpoints.

2. Note the end point address ‘abc’.

1
<endpoint address="abc"
This need to map to the path the immediately follows the base host address in your URL;

http://localhost:1980/abc

Hope this helps. I find writing a test like this useful for testing my end points and making sure I’ve got everything setup.

答案 3 :(得分:0)

我添加了一个额外的端点来发布WCF测试客户端和单元测试所需的soap元数据。

REST / SOAP endpoints for a WCF service

中描述了设置和类似问题