2013-03-11 3 views
0

Я новичок в создании веб-сервисов, и я не совсем понимаю, как получить доступ к моему веб-сервису.Как ссылаться на веб-службу WCF через URI/как отправлять POST в службу WCF через URI?

Что я пытаюсь сделать, так это создать веб-сервис WCF, который считывает данные JSON, которые отправляются на него и десериализует его, а затем что-то делает.

Я создал очень простой сервис WCF с двумя открытыми методами и созданной конечной точкой uri. Хотя, когда я иду на свой uri, я ничего не получаю.

Я должен быть в состоянии перейти к 'http: // localhost: 8000/asd/EchoWithGet? S = Hello, world!' в моем браузере, и этот метод должен вернуть «Вы сказали» + s. Когда я перехожу к этому при запуске службы, я ничего не получаю.

Мой вопрос: как я могу подключить свою программу? Могу ли я также отправить сообщение на мою службу через HTML-форму, а затем открыть IO-ридер?

Заранее благодарим за помощь.

Ниже приведен мой код.

namespace WcfService1 
{ 
[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    [WebGet] 
    string EchoWithGet(string s); 

    [OperationContract] 
    [WebInvoke] 
    string EchoWithPost(string s); 
} 

public class Service1 : IService1 
{ 
    public string EchoWithGet(string s) 
    { 
     return "You said " + s; 
    } 
    public string EchoWithPost(string s) 
    { 
     return "You said " + s; 
    } 
} 

class program 
{ 
    static void Main(string[] args) 
    { 
     WebServiceHost host = new WebServiceHost(typeof(Service1), new Uri("http://localhost:8000/asd/")); 
     ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IService1), new WebHttpBinding(), ""); 

     /* 
     ServiceDebugBehavior sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>(); 
     sdb.HttpHelpPageEnabled = false; 
     */ 

     host.Open(); 

     Console.WriteLine("Service is running"); 
     Console.WriteLine("Press enter to quit..."); 
     Console.ReadLine(); 
     host.Close(); 
    } 
} 

Заранее спасибо за помощь

Обновлено, я думаю, что мой вопрос вытекает из моего файла конфигурации. Какую информацию мне нужно добавить в файл конфигурации, чтобы иметь возможность использовать мой веб-сервис через браузер?

<?xml version="1.0"?> 
<configuration> 
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
</system.web> 
<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 
</configuration> 

ответ

0

Вы можете изменить используя ниже код и проверить его снова.

<system.serviceModel> 
    <services>  
    <service behaviorConfiguration="WcfService1.Service1Behavior" 
    name="WcfService1.Service1"> 
    <endpoint address="" behaviorConfiguration="JSONEndpointBehavior" 
     binding="webHttpBinding" contract="WcfService1.IService1" /> 
    <endpoint address="ws" binding="wsHttpBinding" contract="WcfService1.IService1"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />  
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="JSONEndpointBehavior"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="WcfService1.Service1Behavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior>   
    </serviceBehaviors> 
</behaviors> 

и модифицировать webvoke с кодом ниже

[WebInvoke(Method = "GET", UriTemplate = "/EchoWithPost/{s}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 

строки EchoWithPost (строка с);

+0

вы можете попробовать путем удаления ниже конечных точек внутри службы тега <адрес конечной точки = «WS» привязки = «WsHttpBinding» контракт = "WcfService1.IService1 "> Parthi

+0

Эй, ребята, спасибо за помощь, но, к сожалению, ни одно из этих решений не устраняет мою проблему. Я правильно создал свой URI и правильно создал конечную точку? Итак, я должен иметь доступ к моей службе локально? Я могу использовать WCF-клиент, и он работает нормально, я просто хочу получить доступ к нему через браузер и, в конечном итоге, через почтовый метод. Правильно ли я создал свою конечную точку? Благодарю. – recneps

+0

Также простите, что я не знаю, что делаю, но вы добавили глагол «Get» к атрибуту webInvoke? Я думал, что webGet поддерживает Get, а webInvoke - для других глаголов, таких как POST, PUT, DELETE и т. Д.? Спасибо. – recneps

0

попробовать в ServiceModel раздел файла Web.config:

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="RestServiceBehavior" name="Service1"> 
     <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" 
      bindingConfiguration="webHttpBindingWithJSONP" contract="IService1" /> 
     </service> 
    </services> 

    <bindings> 
     <webHttpBinding> 
     <binding name="webHttpBindingWithJSONP"/> 
     </webHttpBinding> 
    </bindings> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="RestServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
Смежные вопросы