Создание веб-службы с WCF для использования существующим клиентом Java с использованием WSDL
У меня есть существующий клиент Java, для которого мне нужно создать веб-сервис в.NET 4.0. Интерфейс уже определен с файлом WSDL, поэтому я создал библиотеку классов и сгенерировал заглушку на стороне сервера с помощью WSCF.blue (я также попытался svcutil безуспешно). WSCF.blue заботится о ссылках и добавлении файлов (отличный инструмент:-)), поэтому я заменил сгенерированное исключение System.NotImplementedException некоторым кодом. Затем я разместил результат на сервере разработки ASP.NET.
Я предполагаю, что мне нужен какой-то дополнительный шаг, так как я получаю известное "Имя контракта" WsdlWebService.IHello "не может быть найдено в списке контрактов, реализованных сервисом" Hello "". при поиске службы в браузере (см. Не найдено имя контракта WCF 'IMyService'?). Но здесь есть атрибут 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>
1 ответ
Я просто догадываюсь, так как у меня не было этой ошибки, но я заметил, что вы установили ConfigurationName = "IHello"
в контракте на обслуживание, но в конфигурации вы называете его "WsdlWebService.IHello". Я бы по крайней мере проверил, является ли имя конфигурации атомарным или все еще только частью пространства имен.