.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입니다
누락 된 세부 사항이었던 DonAndre 덕분에 이제 브라우저에서 웹 서버를보고 WSDL에 연결할 수 있습니다. 불행히도 나는 WCF 서비스가 원래의 Java 기반 서버와 정확히 동일하지 않다는 것을 알았습니다. 왜냐하면 동일한 클라이언트로 액세스 할 때 "수신하는 엔드 포인트가 없습니다"라는 오류가 발생하기 때문입니다. 나는 너에게 많은 도움이 될만한 좋은 자료를 알고있다. – Lorenz
죄송합니다. 어쩌면 같은 기술로 새로운 자바 클라이언트를 생성하고 서비스 접근 지점과 다른 점이 있는지 확인하십시오. – Andreas