编辑:
在我修改了之后web.config,我没有得到错误,这是好的....然后我添加一个新页面(html)并编写这个小代码来使用这样的服务:
$("#btn12").click(function (event) {
$.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
function (data) {
alert(data);
});
//return false;
});
Run Code Online (Sandbox Code Playgroud)
我在FireBug中看到以下错误:
http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request
Run Code Online (Sandbox Code Playgroud)
注意:我在同一个wcf项目中添加了html页面并自行运行项目,所以我假设服务也在运行...
这可能有什么问题?
结束编辑
我刚刚创建了一个新的wcf服务,当我从VS点击f5时,我在WCF测试客户端窗口中收到此错误:
无法添加服务.可能无法访问服务元数据.确保您的服务正在运行并公开元数据.
错误:无法从http:// localhost:3696/MobileService.svc获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布.有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档.
WS-Metadata Exchange错误
URI:http:// localhost:3696/MyService.svc
元数据包含无法解析的引用:' http:// localhost:3696/MyService.svc '.在http:// localhost:3696/MyService.svc上没有可以接受该消息的端点.这通常是由错误的地址或SOAP操作引起的.有关更多详细信息,请参阅InnerException(如果存在).
无法连接到远程服务器无法建立连接,
因为目标计算机主动拒绝它127.0.0.1:3696
HTTP GET错误
URI:http:// localhost:3696/MyService.svc
下载' http://时出错localhost:3696/MyService.svc '.
无法连接到远程服务器无法建立连接,
因为目标计算机主动拒绝它127.0.0.1:3696
我的配置:
<behaviors>
<endpointBehaviors>
<behavior name="MyService.MyService">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService"
behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding"
bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
</service>
</services>
<bindings>
<customBinding>
<binding name="jsonpBinding">
<jsonpMessageEncoding/>
<httpTransport manualAddressing="true"/>
</binding>
</customBinding>
</bindings>
<extensions>
<bindingElementExtensions>
<add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</bindingElementExtensions>
</extensions>
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 35
您需要向服务添加元数据交换(mex)端点:
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding" bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够获得服务的元数据
更新:好的,所以你只是从Visual Studio中启动它 - 在这种情况下,它将托管在内置的Web服务器Cassini中.然而,这只野兽只支持HTTP - 你没有在绑定中使用该协议......
此外,由于您在Cassini中托管此服务,因此您的服务地址将由Cassini决定 - 您无法定义任何内容.
所以我的建议是:
所以我会将配置更改为:
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="" <!-- don't put anything here - Cassini will determine address -->
binding="basicHttpBinding"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
完成后,尝试View in Browser在Visual Studio解决方案中对SVC文件执行操作- 如果这不起作用,则仍然存在某种主要问题.
如果它有效 - 现在您可以在VS中按F5并且您的服务应该出现,并且使用WCF测试客户端应用程序,您应该能够从a)Cassini开始服务的地址获取服务元数据,或者b) mex地址(卡西尼号地址+ /mex)
仅供参考 - 您也可以从没有足够内存的机器上获得此错误. 我在一台运行16台机器的机器上出现了这个错误.我有一个运行6个演出的VM和很多内存密集型应用程序.关闭一些,这个问题就消失了.
我仍然在问题的标题中得到了错误
无法添加服务.可能无法访问服务元数据.确保您的服务正在运行并公开元数据
在使用WCF测试客户端时,我确实注意到有关内存的更大消息.
希望这有助于其他人.