Какие шаги я должен сделать для преобразования от библиотеки классов до WCF?

Используйте "кучу" для того, чтобы только выделить место для объектов во времени выполнения. Если Вы знаете размер во время компиляции, используйте стек. Вместо того, чтобы возвратить выделенные "куче" объекты из функции, передайте буфер в функцию для него для записи в. Тем путем буфер может быть выделен, где функция вызвана как массив или другая стековая структура.

, Чем меньше malloc () операторы Вы имеете, тем меньше возможностей для утечек памяти.

6
задан Yuriy Faktorovich 18 November 2009 в 21:46
поделиться

2 ответа

WCF is not dot net. To create a WCF application you have to do four things

  1. Define a service contract
  2. Implement the contract on the server side
  3. Host your implemented service
  4. Create a Client that also can use the service contract

take a look at this tutorial

This is a complete example of a service and its host

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();



    }
}

You also have to run this command

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

some of this comes from here

0
ответ дан 8 December 2019 в 16:04
поделиться

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

некоторые параметры в файлах 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.

14
ответ дан 8 December 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: