2012-10-20 5 views
0

.NET 4.0 용 웹 서비스를 빌드하는 데 필요한 기존 자바 클라이언트가 있습니다. 인터페이스는 이미 WSDL 파일로 정의되어 있으므로 클래스 라이브러리를 만들고 WSCF.blue을 사용하여 서버 측 스텁을 생성했습니다. 또한 성공없이 svcutil을 시도했습니다. WSCF.blue는 참조를 처리하고 파일 (멋진 도구 :-)를 추가하므로 생성 된 System.NotImplementedException을 일부 코드로 대체했습니다. 그런 다음 결과를 ASP.NET 개발 서버에서 호스팅했습니다.WSDL을 사용하여 기존 Java 클라이언트에서 사용하기 위해 WCF로 웹 서비스 빌드하기

유명한 "계약 이름 'WsdlWebService.IHello'가 서비스 'Hello'가 구현 한 계약 목록에서 찾을 수 없기 때문에 추가 단계가 필요합니다." 브라우저에서 서비스를 찾을 때 (WCF Contract Name 'IMyService' could not be found? 참조). 그러나 여기에 ServiceContractAttribute가 있습니다.이 ServiceContractAttribute는 작업을 수행 할 것으로 기대합니다.

누군가가 내가 부족 무엇을 가리 수 있다면 감사하겠습니다

...

는 생성 된 인터페이스와 구현된다



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

:



    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입니다

답변

0

오류가 발생하지 않았으므로 추측하고 있지만 서비스 계약에 ConfigurationName = "IHello"을 설정했는데 "WsdlWebService.IH ello "로 설정하십시오. 최소한 구성 이름이 원자 이름인지 아니면 여전히 네임 스페이스의 일부인지 확인해야합니다.

+0

누락 된 세부 사항이었던 DonAndre 덕분에 이제 브라우저에서 웹 서버를보고 WSDL에 연결할 수 있습니다. 불행히도 나는 WCF 서비스가 원래의 Java 기반 서버와 정확히 동일하지 않다는 것을 알았습니다. 왜냐하면 동일한 클라이언트로 액세스 할 때 "수신하는 엔드 포인트가 없습니다"라는 오류가 발생하기 때문입니다. 나는 너에게 많은 도움이 될만한 좋은 자료를 알고있다. – Lorenz

+0

죄송합니다. 어쩌면 같은 기술로 새로운 자바 클라이언트를 생성하고 서비스 접근 지점과 다른 점이 있는지 확인하십시오. – Andreas