WCF Web 服务在"extracting interface"后失败



我是WebServices的新手,有一个简单的问题。

我用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 无法加载元数据......" 我比他告诉我: WebServiceTest.ServiceAjax 在 ServiceAjax 实现的合约列表中找不到

所以,它一定是一个转储犯规,因为我无法解释为什么提取接口会破坏服务,我肯定错过了一些简单的东西。

但是我找不到与网络中的"简单WCF Web HTTP 服务"示例的区别。

想法?

更新:我将其添加到现有的ASPX项目中,而不是"干净"的wcf项目....

我自己找到了答案(在获得风滚草徽章后......

WebConfig 中缺少一行

<endpoint address="mex" 
binding="mexHttpBinding" 
name="mex" 
contract="IMetadataExchange" /> 

我尝试过在 SVC 标记中使用不同的"工厂",但没有奏效。 也许还没有找到合适的... 即

<%@ServiceHost language=c# Debug="true" Service="WebServiceTest.ServiceAjax"  
Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory%> 

毕竟,手动添加配置并添加到其中确实起到了作用。 我按照中的步骤操作

https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-configuration-to-add-an-aspnet-ajax-endpoint

这导致了"无法加载元数据"问题,我可以用顶部(墨西哥端点(上的行修复。 为什么 mircosoft [原文如此] 没有指出这一点,我不知道...... 以及为什么在使用界面时开始需要这,我也不知道。 但是当他需要它时,我偶然发现了更多情况,即 AJAX 脚本管理器,它也需要在服务声明中使用命名空间参数:

[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>

相关内容

  • 没有找到相关文章

最新更新