我是WebService的新手,并且有一个简单的问题。
我用Visual Studio 2017编写了“ Hello World”服务: ServiceAjax.svc.cs:
namespace WebServiceTest
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceAjax
{
[OperationContract]
[WebGet]
public string DoWork()
{
return "Hallo World";
}
}
}
ServiceAjax.svc的内容如下:
<%@ ServiceHost Language="C#" Debug="true" Service="WebServiceTest.ServiceAjax" CodeBehind="ServiceAjax.svc.cs" %>
运行此程序效果很好。
现在,我阅读了声明服务接口的方法。 几乎每个示例都这样做...,所以我尝试了:
ServiceAjax.svc.cs:
namespace WebServiceTest
{
[ServiceContract]
public interface IServiceAjax
{
[OperationContract]
[WebGet]
string DoWork();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceAjax: IServiceAjax
{
public string DoWork()
{
return "Hallo World";
}
}
}
运行此命令会出现错误: 它是德语,所以我的翻译可能不如英文消息那样出色: “无法从http://localhost:58513/ServiceAjax.svc加载元数据...” 我在下面一点点告诉他: 在ServiceAjax实施的合同列表中找不到WebServiceTest.ServiceAjax wos
因此,它一定是一个转储对象,因为我无法解释为什么提取接口会破坏服务,我肯定错过了一些简单的事情。
但是我找不到与网上的“简单WCF Web HTTP服务”示例有所不同。
想法?
更新:我将其添加到现有的ASPX项目中,而不是“干净的” wcf项目中……。
答案 0 :(得分:0)
我自己找到了答案(在获得了风滚草徽章后...)
WebConfig中缺少一行
<endpoint address="mex"
binding="mexHttpBinding"
name="mex"
contract="IMetadataExchange" />
我在SVC-Markup中尝试了不同的“工厂”,但是没有用。 也许没有找到合适的... 即
<%@ServiceHost language=c# Debug="true" Service="WebServiceTest.ServiceAjax"
Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory%>
手动添加配置并添加到配置中确实可以解决问题。 我按照
中的步骤进行操作这导致“无法加载元数据”问题,我可以使用顶部(mex端点)上的行修复此问题。 为什么mircosoft [sic]没有指出这一点,我不知道... 以及为什么在使用界面时开始需要蜂鸣声,我都不知道。 但是我偶然发现更多的场合,当他需要时,即AJAX脚本管理器,它也需要Servicedeclaration中的命名空间参数:
[ServiceContract(Namespace = "AJAXService")]
下面是我添加到web.config中的内容(所有已包含4行短缺的行
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="myServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myDataAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service behaviorConfiguration="myServiceTypeBehaviors"
name="WebServiceTest.ServiceAjax">
<endpoint address=""
behaviorConfiguration="myDataAspNetAjaxBehavior"
binding="webHttpBinding"
name="ZESData"
contract="WebServiceTest.IZESData" />
<endpoint address="mex"
binding="mexHttpBinding"
name="mex"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>