Не удается получить доступ к службе WCF из IE - PullRequest
2 голосов
/ 30 июля 2011

Это, вероятно, обсуждалось, однако все темы, которые я видел по этой теме, не помогли мне, поэтому я пишу.

Я пытаюсь разместить службу HTTP WCF в IIS 5.1.Это очень просто.Я создал виртуальный каталог в IE под названием wcftest, который указывает на фактическую папку, содержащую содержимое службы.Вот структура:

Web.config
ConsoleWCF.svc
[App_Code] \ Program.cs

Вот код для ConsoleWCF.svc

<%@ ServiceHost Debug="true" Service="ConsoleWCF.WCFImplementer" Language="C#" %>

Web.config выглядит следующим образом:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="ConsoleWCF.WCFImplementer" 
               behaviorConfiguration="ServiceBehavior">
        <endpoint 
            address="" 
            binding="basicHttpBinding" 
            contract="ConsoleWCF.WCFInterface" />
        <endpoint 
            address="mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

И, наконец,Program.cs это:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Description;

namespace ConsoleWCF
{
    [ServiceContract]
    public interface WCFInterface
    {
        [OperationContract]
        [WebGet]
        string GetData();
    }

    public class WCFImplementer : WCFInterface
    {
        public string GetData()
        {
            return "Tested Console WCF";
        }
    }
}

Я могу получить доступ к этому в IE, перейдя к http://localhost/wcftest/ConsoleWCF.svc.

Однако я не понимаю, как получить доступ к методу GetData, который у меня есть.Когда я делал это с помощью автономного хоста, у меня не было проблем с доступом к нему.Любая помощь с благодарностью.

1 Ответ

2 голосов
/ 30 июля 2011

Чтобы WCF мог понять атрибут [WebGet], конечная точка должна иметь определенную конфигурацию, а именно использовать webHttpBinding (не basicHttpBinding, как вы) и добавить к ней WebHttpBehavior.Если вы измените web.config на что-то похожее на приведенное ниже, вы сможете перейти к http://localhost/wcftest/ConsoleWCF.svc/GetData.

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="REST">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <services>
    <service name="ConsoleWCF.WCFImplementer">
      <endpoint address=""
                behaviorConfiguration="REST"
                binding="webHttpBinding"
                contract="ConsoleWCF.WCFInterface" />
    </service>
  </services>
</system.serviceModel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...