我添加了以下服务配置,以允许通过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客户端工作正常。
答案 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()
{
}
答案 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元数据。
中描述了设置和类似问题