Какие шаги мне нужно предпринять, чтобы преобразовать библиотеку классов в WCF? - PullRequest
5 голосов
/ 19 ноября 2009

Я создал проект в виде библиотеки классов. Теперь мне нужно превратить это в WCF. Я могу создать проект WCF, но я бы хотел избежать всей этой суеты с TFS. Я сделал App.config и добавил строку /client:"wcfTestClient.exe "в аргументы командной строки. Но, похоже, чего-то не хватает при запуске хостинга.

Ответы [ 3 ]

12 голосов
/ 04 июня 2010

Я обнаружил следующее, поступая противоположно тому, чего вы пытаетесь достичь, то есть изменив библиотеку служб на консольное приложение ..

некоторые настройки в файлах csproj нельзя редактировать с экрана настроек из VS, чтобы преобразовать библиотеку классов в сервисную библиотеку WCF, вам необходимо добавить следующее в файл проекта

Добавьте следующее к первому PropertyGroup [это руководства для проекта C # WCF]

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

См. Здесь для получения дополнительной информации о ProjectTypeGuids

Вам также может понадобиться добавить следующую строку сразу ниже:

<StartArguments>/client:"WcfTestClient.exe"</StartArguments>

Но, в конечном счете, это PropertyTypeGuids, которые вам нужно вручную вставить, чтобы VS распознал проект как проект библиотеки служб WCF.

1 голос
/ 19 июня 2012

Это то, что мне нужно было сделать, чтобы конвертировать мою библиотеку классов в приложение WCF REST.

1) Измените файл .csproj и добавьте две нижеследующие строки к первому элементу PropertyGroup в файле .csproj.

<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<UseIISExpress>false</UseIISExpress>

2) Добавьте следующую строку ниже <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> для импорта файла Microsoft.WebApplication.targets

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

3) Добавьте следующий код в конец файла перед тегом </Project>.

<ProjectExtensions>
<VisualStudio>
  <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
    <WebProjectProperties>
      <UseIIS>False</UseIIS>
      <AutoAssignPort>True</AutoAssignPort>
      <DevelopmentServerPort>50178</DevelopmentServerPort>
      <DevelopmentServerVPath>/</DevelopmentServerVPath>
      <IISUrl>
      </IISUrl>
      <NTLMAuthentication>False</NTLMAuthentication>
      <UseCustomServer>False</UseCustomServer>
      <CustomServerUrl>
      </CustomServerUrl>
      <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
    </WebProjectProperties>
  </FlavorProperties>
</VisualStudio>

4) Сохраните файл .csproj и Перезагрузите проект.

5) Добавьте файл Web.Config в проект и добавьте приведенный ниже минимальный код. Вы можете добавить больше позже по вашему требованию.

    <?xml version="1.0"?>
<configuration>

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

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
  </system.webServer>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

</configuration>

6) Добавьте файл Global.asax. Ниже приведен пример файла.

    public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "Service1" string below
        RouteTable.Routes.Add(new ServiceRoute("YourService", new WebServiceHostFactory(), typeof(YourServiceClass)));
    }
}

7) Наконец, в свойствах проекта на вкладке Build, если путь вывода установлен на bin\Debug, измените его на bin\.

0 голосов
/ 19 ноября 2009

WCF не является точечной сетью. Чтобы создать приложение WCF, вам нужно сделать четыре вещи

  1. Определить договор на обслуживание
  2. Реализация контракта на стороне сервера
  3. Хостинг реализованной вами услуги
  4. Создание клиента, который также может использовать договор на обслуживание

взгляните на этот учебник

Это полный пример службы и ее хоста

using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;
using System;

[ServiceContract]
public interface  AddStuff
{
    [OperationContract]
    int Add(int X,int Y);
}

public class opAddStuff : AddStuff
{
    public int Add(int X, int Y)
    {
        return X + Y;
    }
}

public class Pgm
{
    static void Main(string[] args)
    {
        string httpAddr = "http://127.0.0.1:6001/AddStuff";
        string netAddr= "net.tcp://127.0.0.1:5001/AddStuff";

        System.ServiceModel.ServiceHost SH = new ServiceHost(typeof(opAddStuff),new Uri(httpAddr));

        BasicHttpBinding B = new BasicHttpBinding();
        NetTcpBinding NB = new NetTcpBinding();

        SH.AddServiceEndpoint(typeof(AddStuff), B, httpAddr);
        SH.AddServiceEndpoint(typeof(AddStuff), NB, netAddr);



        System.ServiceModel.Description.ServiceMetadataBehavior smb = SH.Description.Behaviors.Find<ServiceMetadataBehavior>();
        // If not, add one
        if (smb == null)
            smb = new ServiceMetadataBehavior();

        smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;

        SH.Description.Behaviors.Add(smb);
        SH.AddServiceEndpoint(  ServiceMetadataBehavior.MexContractName,  MetadataExchangeBindings.CreateMexHttpBinding(),  "mex");

        SH.Open();

        Console.WriteLine("Service at your service");
        string crap = Console.ReadLine();



    }
}

Вы также должны запустить эту команду

netsh http add urlacl url = http://+:6001/AddStuff user = DOMAIN \ USER

отчасти это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...