2014-01-16 3 views
0

Я создал службу WCF в Visual Studio 2010 и опубликовал ее на сервере с IIS 7.5.Какой url необходим для использования службы WCF

У этого метода есть один метод - returnNumber. Это принимает параметр int с именем numberIn, умножает его на 2 и возвращает ответ.

Если я ставлю

http://myserver/TestService/Service1.svc?wsdl 

в браузере, он отображает страницу XHTML.

Какой url я должен использовать, чтобы я мог вызвать свою службу WCF из браузера - передав число в QueryString, чтобы вызвать метод returnNumber?


Далее в ответах ниже - Даниил - вот мой код:

Веб конфигурации:

<?xml version="1.0"?> 
<configuration> 
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
</system.web> 
<system.serviceModel> 
<behaviors> 
<serviceBehaviors> 
<behavior> 
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
<serviceMetadata httpGetEnabled="true"/> 
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
<serviceDebug includeExceptionDetailInFaults="false"/> 
</behavior> 
</serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
</configuration> 

Файл IServicer1.cs, содержащий интерфейс:

namespace NumberTest 
{ 
    [ServiceContract] 
    public interface IService1 
    { 
    [OperationContract(IsOneWay = false)] 
    int returnNumber(int numberIn); 
    } 
} 

И Service1.svc.cs

namespace NumberTest 
{ 
    public class NumberService : IService1 
    { 
     public int returnNumber(int numberIn) 
     { 
     int returnValue = numberIn * 2; 
     return returnValue; 
    } 
} 

я опубликовал выше

http://myServer/TestService 

и, если добавить ссылку на службу WCF внутри веб-приложения VS, метод returnNumber подвергается и работает, если я это называю.

Как разрешить людям, использующим веб-сайты, которые не являются asp.net (чтобы они не могли добавить ссылку на службу), чтобы иметь возможность вызвать мой метод returnNumber и вернуть номер?

+0

вы, вероятно, следует рассмотреть Web API для такого рода функциональности – Alex

+0

Когда вы говорите «веб апи» вы имеете в виду веб-службы мыло? –

+0

Нет, я имею в виду инфраструктуру ASP.net WebApi. Google - ваш друг ... – Alex

ответ

0

Чтобы передать аргументы службе в querystring, к сожалению, вы не используете правильный стек технологий.

WCF предоставляет веб-операции через конечную точку SOAP 1.2 (по умолчанию), что означает, что веб-сервер ожидает запроса SOAP (то есть огибающей мыла, обертывающего полезную нагрузку XML-запроса), направленной на URL-адрес службы.

Что вы хотите сделать, это подключить чистый HTTP-сервис, для которого правильный стек технологий Microsoft - ASP.NET WebApi.

+0

'... что означает, что веб-сервер ожидает запроса SOAP (это мыльный конверт, обертывающий полезную нагрузку XML-запроса), направленного на URL-адрес службы ...' Спасибо , Что мне нужно, чтобы сообщить кому-то, кто хочет вызвать мою службу WCF с веб-сайта jsp? –

+0

Сообщите им, чтобы они потребляли метаданные из адреса метаданных вашего сервиса (который является адресом службы с? Wsdl в конце). Эти метаданные содержат информацию об операциях и типах, открытых на границе вашего сервиса, и позволят вызывающему устройству создать прокси-сервер службы, который позволит им вызвать ваши методы обслуживания, как если бы они были в процессе на конце. Я не разработчик Java, но я думаю, что JabX это сделает. –

+0

Спасибо за помощь. Я нахожу, что файл wsdl полон ссылок на tempuri.org. Будет ли это проблемой? Нужно ли мне избавляться от них? –

0

Вы можете использовать тестовый клиент WCF (в зависимости от версии VS, которую вы используете), введите адрес вашего WSDL и используйте это, чтобы проверить свой веб-сервис.

Если вы используете тестовый клиент и такой инструмент, как Fiddler, вы можете узнать URL-адреса, которые используются под обложками, ищите HTTP-сообщения POST для вашего веб-сервиса.

+0

Я использую VS 2010. Где вы получаете доступ к тестовому клиенту WCF? Я полностью завладел неправильным концом палки? Я думал, что службы WCF должны предоставлять возможность (например) отправлять данные на чужой сервер и получать ответ. Если они недоступны, отправляя параметры в querystring - в чем смысл? (За исключением других пользователей Windows, которые могут добавить ссылку на службу, но как насчет людей, которые не используют Windows и не создают приложения asp.net?) –

+0

@MartinSmellworse Посмотрите в C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE (для VS 2010, изменение на Visual Studio 10.0) для WcfTestClient.exe. У вас нет неправильного конца палки в отношении целей веб-сервисов. В браузере вы действительно не можете протестировать - вам нужно делать POST со всеми, кроме простейших веб-сервисов (я не могу сказать, ожидает ли вас POST, не видя кода и конфигурации), поэтому тестовый клиент WCF идеально подходит для потому что это показывает это. –

+1

@MartinSmellworse Взгляните на http://www.getpostman.com/ - полезно для тестирования веб-сервисов, если вам удобно обрабатывать запросы. –

0

Что касается вашего второго вопроса, потребляющего ваш веб-сервис с платформы nonasp.net, вам нужно настроить свою службу только для предоставления WSDL.

Платформы Non -.net, например Java, имеют инструменты, такие как wsdl2java, которые потребляют WSDL и создают необходимый код клиента.

Инструменты и использование могут варьироваться в зависимости от платформы, но следующая ссылка должна обеспечивать ценную точку отсчета. http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html

С уважением,

Смежные вопросы