svcutil.exe или тестирование wcf службы JSON на выходе? - PullRequest
1 голос
/ 21 октября 2011

это сообщение находится за спиной моего последнего вопроса (думал, что я начну новый вопрос).

Я пытаюсь создать и протестировать простой (простой для вас, неme lol) веб-сервис WCF, который выводит JSON.Я верю (с помощью), что приложение в порядке, но мне нужно проверить его, и я не знаю, как.

Я приложу свой код ниже, но вот что происходит, если я запускаю приложение, которое загружается http://localhost:52002/ и я получаю приветствие на странице ASP.NET, если запустить приложение, пока я нахожусь в моем .svc, оно загружает http://localhost:52002/MyTestService.svc, и я получаю страницу:

Вы создали сервис.

Чтобы протестировать этот сервис, вам нужно будет создать клиент и использовать его для вызова сервиса.Вы можете сделать это с помощью инструмента svcutil.exe из командной строки со следующим синтаксисом:

svcutil.exe http://localhost:52002/MyTestService.svc?wsdl

Мне сказали, что я могу http://localhost:52002/MyTestService.svc/GetResults чтобы увидеть вывод JSON (см. Код ниже), но все, что я получаю, это:

Веб-страница не может быть найдена

Любые предложения были бы хорошими, я извиняюсьдля того, чтобы быть abit новым для всего этого, и, пожалуйста, попросите вас, может быть, разобрать вещи abit больше, чем обычно, lol

Вот мой код и танки очень

Person.cs

[DataContract]
public class Person
{
    [DataMember]
    public string FirstName { get; set; }

    [DataMember]
    public string LastName { get; set; }

    [DataMember]
    public int Age { get; set; }

    public Person(string firstName, string lastName, int age)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Age = age;
    }
}

MyTestServices.svc.cs

[ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode =  `AspNetCompatibilityRequirementsMode.Allowed)]`
    public class TestService
    {
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]

    public List<Person> GetResults()
    {
        List<Person> results = new List<Person>();
        results.Add(new Person("Peyton", "Manning", 35));
        results.Add(new Person("Drew", "Brees", 31));
        results.Add(new Person("Tony", "Romo", 29));

        return results;
    }

MyTestService.svc

<%@ ServiceHost Language="C#"
    Service="TestService.TestService"
    Factory="System.ServiceModel.Activation.ServiceHostFactory" %>

Web.Config

<configuration>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

  </system.web>

  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <bindings />
    <client />
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
</configuration>

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Я всегда использую fiddler для отладки запроса.С новым Web Api для WCF вы можете установить заголовок принятия для клиента в application / JSON, и ответ будет отформатирован как JSON.

1 голос
/ 22 октября 2011

Я не эксперт WCF, поэтому я не могу сказать вам, что не так с вашим текущим приложением, но я могу дать вам инструкции по настройке очень простого примера с использованием вашего кода, который вернет результат в Fiddler.

  1. Создание нового ASP.NET Пусто Веб-приложение
  2. Добавьте файл кода со следующим:

Обычно я бы не помещал все в один файл, но для простоты ...

using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace WebApplication1
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        List<Person> GetResults();
    }

    public class TestService : ITestService
    {
        public List<Person> GetResults()
        {
            List<Person> results = new List<Person>();
            results.Add(new Person("Peyton", "Manning", 35));
            results.Add(new Person("Drew", "Brees", 31));
            results.Add(new Person("Tony", "Romo", 29));

            return results;
        }
    }

    [DataContract]
    public class Person
    {
        [DataMember]
        public string FirstName { get; set; }

        [DataMember]
        public string LastName { get; set; }

        [DataMember]
        public int Age { get; set; }

        public Person(string firstName, string lastName, int age)
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Age = age;
        }
    }
}

Обновление web.config файла:

<configuration>

    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

    <system.serviceModel>

        <serviceHostingEnvironment>
            <serviceActivations>
                <add relativeAddress="test.svc"
                     service="WebApplication1.TestService"
                     factory="System.ServiceModel.Activation.WebServiceHostFactory" />
            </serviceActivations>
        </serviceHostingEnvironment>

    </system.serviceModel>

</configuration>

Вам не нужен файл .svc, поэтому запустите приложение, отметив корневой URL-адрес, используемый сервером разработки ASP.NET. На вкладке Построитель запросов в Fiddler введите ваш URL:

enter image description here

Нажмите кнопку «Выполнить», и вы увидите результаты своей услуги:

enter image description here

Надеюсь, вы сможете использовать это, чтобы выяснить, что вам нужно обновить в службе, чтобы она заработала. Удачи!

1 голос
/ 21 октября 2011

Я не вижу ваш интерфейс, но вам не хватает некоторых вещей, если вы хотите, чтобы он был отдыхающим.

//Add this to your method    
[WebGet(UriTemplate="/Results")]
public List<Person> GetResults()
{
    List<Person> results = new List<Person>();
    results.Add(new Person("Peyton", "Manning", 35));
    results.Add(new Person("Drew", "Brees", 31));
    results.Add(new Person("Tony", "Romo", 29));

    return results;
}

Теперь вы сможете вызывать его, используя http://localhost:52002/MyTestService.svc/Results. Просто измените значение uri tempalte на то, что вы хотите.

Вам также может понадобиться изменить фабрику на WebServiceHostFactory.

<%@ ServiceHost Service="TestService.MyTestService"
    Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...