添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。 WCF 错误
Posted
技术标签:
【中文标题】添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。 WCF 错误【英文标题】:Failed to add a service. Service metadata may not be accessible. Make sure your service is running and exposing metadata. WCF Error 【发布时间】:2015-11-07 12:03:58 【问题描述】:我有一个 WCF 服务的要求,其中只有一种方法将数据作为 json 返回。 所以,我所做的是:
1) 创建了一个名为 IAdmin 的服务和相应的类 Admin.svc
2) 在服务中,有多个带有 [OperationContract] 属性的方法。
3) 我想用json返回数据的方法写成:-
[OperationContract]
[WebGet(UriTemplate="/getDetails", ResponseFormat=WebMessageFormat.Json)]
Admin_UserDetails getUserDetails(int user_id);
4) 在配置文件中我添加了以下内容:-
<service name="VMS_WCF_Service.Service1" behaviorConfiguration="VMS_WCF_Service.VMSBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://xxx.xxx.xx.xx/<Folder Name>/Admin.svc"/>
</baseAddresses>
</host>
<endpoint address="Admin.svc" binding="basicHttpBinding" contract="<Namespace>.IAdmin" bindingConfiguration="ServicesBinding" >
<identity>
<dns value="192.168.82.57"/>
</identity>
</endpoint>
<!-- Added by Agnib | START -->
<endpoint name="serv" address="ep1" binding="webHttpBinding" contract="<Namespace>.IAdmin" behaviorConfiguration="jsonBehavior" bindingConfiguration="ServiceBinding"></endpoint>
<!-- Added by Agnib | END -->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
5) 我还添加了:-
<bindings>
<webHttpBinding>
<binding name="ServiceBinding"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" sendTimeout="00:10:00" >
<readerQuotas
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxDepth="2147483647"
maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647" />
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
6) 最后,在运行时,我收到以下错误:-
Error: Cannot obtain Metadata from http://localhost:<port_no>/Admin.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: http://localhost:<port_no>/Admin.svc Metadata contains a reference that cannot be resolved: 'http://localhost:<port_no>/Admin.svc'. The requested service, 'http://localhost:<port_no>/Admin.svc' could not be activated. See the server's diagnostic trace logs for more information.HTTP GET Error URI: http://localhost:<port_no>/Admin.svc There was an error downloading 'http://localhost:<port_no>/Admin.svc'. The request failed with the error message:--
“/”应用程序中的服务器错误。
合约“IAdmin”的操作“GetPeopleByAssignmentAndStatus”指定多个请求正文参数在没有任何包装元素的情况下进行序列化。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:合同“IAdmin”的操作“GetPeopleByAssignmentAndStatus”指定要序列化的多个请求主体参数,而无需任何包装器元素。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped。
来源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[InvalidOperationException:合约“IAdmin”的操作“GetPeopleByAssignmentAndStatus”指定了多个请求正文参数在没有任何包装元素的情况下进行序列化。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped。] System.ServiceModel.Description.WebHttpBehavior.TryGetNonMessageParameterType(MessageDescription message, OperationDescription declaringOperation, Boolean isRequest, Type& type) +473 System.ServiceModel.Description。 WebHttpBehavior.ValidateBodyStyle(OperationDescription 操作,布尔请求)+140 System.ServiceModel.Description.WebHttpBehavior.ValidateBodyParameters(OperationDescription 操作,布尔请求)+92 System.ServiceModel.Description.c__DisplayClass13.b__d() +105 System.ServiceModel.Description .c__DisplayClass10.b__c() +544 System.ServiceModel.Description.WebHttpBehavior.HideReplyMessage(OperationDescription operationDescription, Effect effect) +183 System.ServiceModel.Description.WebHttpBehavior.GetRequestDispatchFormatter(OperationDescription operationDescription, ServiceEndpoint 端点) +382 System.ServiceModel。描述ption.WebHttpBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) +3356 System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +3301 System.ServiceModel.ServiceHostBase.InitializeRuntime() +65 System.ServiceModel.ServiceHostBase.OnBeginOpen () +34 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +50 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +310 System.ServiceModel.Channels.CommunicationObject.Open() +36 System.ServiceModel.HostingManager .ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +91 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +598[ServiceActivationException: 服务'/Admin.svc'由于编译过程中的异常而无法激活。异常消息是:合同“IAdmin”的操作“GetPeopleByAssignmentAndStatus”指定要序列化的多个请求主体参数,而无需任何包装器元素。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped..] System.Runtime.AsyncResult.End(IAsyncResult result) +495736 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +178 System .ServiceModel.Activation.ServiceHttpHandler.EndProcessRequest(IAsyncResult 结果) +6 System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +129
版本信息:ÿMicrosoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.17929 --.
我在网上找了这个,可以理解是配置有问题,但是检测不到。
感谢任何帮助。
谢谢。
【问题讨论】:
【参考方案1】:将<behavior name="jsonBehavior">
更改为:
<behavior name="jsonBehavior">
<serviceMetadata httpGetEnabled="True"/>
</behavior>
【讨论】:
我可以看到,每当我添加 ---httpGetEnabled="True"
- 必须设置此属性以上是关于添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。 WCF 错误的主要内容,如果未能解决你的问题,请参考以下文章
WCF调试错误:添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。
BigtableConnection API 失败;从元数据服务器获取访问令牌时出错
发送 AUTH LOGIN 命令失败。错误:无法使用 PHP SMTP 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件