编辑:
在我修改了 web.config
并且我没有好的....然后我添加一个新页面(html)并编写这个小代码来使用这样的服务:
$("#btn12").click(function (event) {
$.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
function (data) {
alert(data);
});
//return false;
});
我在FireBug中看到以下错误:
http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request
注意:我在同一个wcf项目中添加了html页面并自行运行项目,所以我假设服务也在运行...
这可能有什么问题?
END EDIT
我刚刚创建了一个新的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上没有可以接受该消息的 endpoints . 这通常是由错误的地址或SOAP操作引起的 . 有关更多详细信息,请参阅InnerException(如果存在) . 无法连接到远程服务器无法 Build 连接,因为目标计算机主动拒绝它127.0.0.1:3696 HTTP GET错误URI:http:// localhost:3696 / MyService.svc下载'http://时出错本地主机:3696 / MyService.svc” . 无法连接到远程服务器无法 Build 连接,因为目标计算机主动拒绝它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>
13 回答
您需要向服务添加元数据交换(mex) endpoints :
现在,您应该能够获得服务的元数据
Update: 好的,所以你只是从Visual Studio中启动它 - 在这种情况下,它将托管在内置的Web服务器Cassini中 . 那个野兽 only 支持HTTP - 你没有在绑定中使用该协议......
此外,由于您在Cassini中托管此服务,因此您的服务地址将由Cassini决定 - 您无法定义任何内容 .
所以我的建议是:
尝试使用http绑定(刚才用于测试)
让这个工作
一旦知道它可行,将其更改为自定义绑定并将其托管在IIS中
所以我会将配置更改为:
完成后,尝试在Visual Studio解决方案中对SVC文件执行
View in Browser
- 如果这不起作用,则仍然存在某种主要问题 .如果它有效 - 现在您可以在VS中按F5并且您的服务应该出现,并且使用WCF Test Client app,您应该能够从a)Cassini开始服务的地址或b)mex地址获取服务元数据(卡西尼的地址
/mex
)如果您重命名svc文件,请确保您的标记是正确的 . 您无需修改默认配置并按照以下步骤操作:1)转到SVC文件,右键单击并选择查看标记2)确保后面的代码和服务指向更正文件和类名 .
FYI - YOU CAN also get this error from a machine that is not having enough memory free. 我在运行16 gig内存的机器上出现此错误 . 我有一个运行6个演出的VM和很多内存密集型应用程序 . 关闭一些,这个问题就消失了 .
我仍然在问题的 Headers 中得到了错误
无法添加服务 . 可能无法访问服务元数据 . 确保您的服务正在运行并公开元数据
在使用WCF测试客户端时,我确实注意到有关内存的更大消息 .
希望这有助于其他人 .
在您公开的类型之前添加
Serializable()
把
Serializable
放入<>
在我的情况下,我收到此错误,因为没有启用选项(HttpActivation) .
如果使用.NET 4.0 WCF服务 - 确保Global.asax不在源目录中 . 如果是,它会在运行时被拾取并尝试在...中编译
在 endpoints 标记中将绑定类型从wsHttpbinding更改为basichttp绑定,从元数据 endpoints 标记中的wsHttpbinding更改为mexhttpbinginding,有助于克服错误 . 谢谢...
在我的情况下,评论出来的
在web.config文件中抛出“无法添加服务 . 可能无法访问服务元数据 . 请确保您的服务正在运行并公开元数据” .
我尝试过在网上提到的几个解决方案,遗憾的是没有任何成功 . 在我的项目中,我为每个服务都有两个接口(xml / json) . 添加mex endpoints 或绑定配置根本没有帮助 . 但是,我注意到,只有在运行带有* .svc.cs或* .config文件的项目时才会出现此错误 . 当我运行带有IService.cs文件的项目(定义了接口)时,添加服务时没有任何错误 . 这真的很奇怪,我认为结论是Visual Studio 2013中的错误 . 我在几台机器上重现了相同的行为(甚至在Windows Server机器上) . 希望这有助于某人 .
大多数情况下,这是由于较少的内存空间 . 首先检查然后尝试其他一些技巧 .
属性
IsOneWay=true
在接口的操作 Contract 中可能为true . 删除该属性以消除此错误 .我发现当我从ServiceContract属性中删除SessionMode时,问题就消失了 .
例:
至...
将此添加到web.config文件并根据您的服务名称和 Contract 名称进行配置 .
请在Service.svc中添加
希望它能帮到你 .