2012-10-20 64 views
0

我有一個現有的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> 

回答

0

我只是猜測,因爲我沒有這個錯誤,但我注意到你在你的服務合同上設置了ConfigurationName = "IHello",但你指的是「WsdlWebService.IH你好「的配置。我至少會檢查配置名稱是否是原子的,還是隻是命名空間的一部分。

+0

感謝DonAndre,這是缺少的細節,我現在可以在瀏覽器中看到Web服務器並進入WSDL。不幸的是,我發現WCF服務與原始的基於Java的服務器不完全相同,因爲在使用同一個客戶端訪問它時,出現「無端點監聽」錯誤。我知道很好的資源可以幫助我承擔很大的責任。 – Lorenz

+0

抱歉不知道。也許嘗試用相同的技術來生成一個新的Java客戶端,並且看看它與服務訪問點是否有任何不同。 – Andreas