我有一个现有的Java客户端,我需要在.NET 4.0中构建一个Web服务。接口已经使用WSDL文件定义,因此我创建了一个类库并使用WSCF.blue生成了服务器端存根(我也尝试过svcutil但没有成功)。 WSCF.blue负责引用并添加文件(很棒的工具:-))所以我只用一些代码替换了生成的System.NotImplementedException。然后我将结果托管在ASP.NET开发服务器中。
我想我需要一些额外的步骤,因为我得到了着名的“合同名称'WsdlWebService.IHello'在服务'Hello'实现的合同列表中找不到。”在浏览器中查找服务时(请参阅WCF Contract Name 'IMyService' could not be found?)。但是这里是一个ServiceContractAttribute,我希望它可以完成这项工作。
如果有人能指出我所缺少的东西,我将不胜感激......
这是生成的界面和实现:
namespace WsdlWebService
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://webservice.com", ConfigurationName="IHello")]
public interface IHello
{
[System.ServiceModel.OperationContractAttribute(Action="http://webservice.com/IHello/helloName", ReplyAction="http://webservice.com/IHello/helloNameResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[return: System.ServiceModel.MessageParameterAttribute(Name="helloNameReturn")]
string helloName(string name);
}
[System.ServiceModel.ServiceBehaviorAttribute(InstanceContextMode=System.ServiceModel.InstanceContextMode.PerCall, ConcurrencyMode=System.ServiceModel.ConcurrencyMode.Single)]
public class Hello : IHello
{
public virtual string helloName(string name)
{
return "Hello world from (via wsdl extraced server) " + name + "!";
}
}
}
这是web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WsdlWebService.Hello"
behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="basicHttpBinding"
contract="WsdlWebService.IHello"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex"/>
</service>
</services>
</system.serviceModel>
</configuration>
答案 0 :(得分:0)
我只是在猜测,因为我没有遇到这个错误,但我注意到你在服务合同上设置了ConfigurationName = "IHello"
,但是你在配置中将它称为“WsdlWebService.IHello”。我至少会检查配置名称是原子的还是仅仅是命名空间的一部分。