我有一個現有的Java客戶端,我需要在.NET 4.0中構建Web服務。該接口已經定義了一個WSDL文件,所以我創建了一個類庫,並使用WSCF.blue生成了服務器端存根(我也嘗試過svcutil沒有成功)。 WSCF.blue負責引用並添加文件(偉大的工具:-)),所以我只用一些代碼替換了生成的System.NotImplementedException。然後我將結果託管在ASP.NET開發服務器中。使用WCF構建Web服務以供現有Java客戶端使用
我想我需要一些額外的步驟,因爲我得到着名的「合同名稱'WsdlWebService.IHello'無法在服務'你好'實施的合同列表中找到。」當在瀏覽器中查看服務時(請參閱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>
感謝DonAndre,這是缺少的細節,我現在可以在瀏覽器中看到Web服務器並進入WSDL。不幸的是,我發現WCF服務與原始的基於Java的服務器不完全相同,因爲在使用同一個客戶端訪問它時,出現「無端點監聽」錯誤。我知道很好的資源可以幫助我承擔很大的責任。 – Lorenz
抱歉不知道。也許嘗試用相同的技術來生成一個新的Java客戶端,並且看看它與服務訪問點是否有任何不同。 – Andreas