подключается к ServiceContract? - PullRequest
0 голосов
/ 07 марта 2011

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

Form1.cs:

...
wcfLib.Service myService = new wcfLib.Service();

private void button1_Click(object sender, EventArgs e)
{
    textBox2.Text = Convert.ToString( myService.go(textBox1.Text) );
}

...

и файл wcf:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace wcfLib
{

    [ServiceContract]
    public interface IfaceService
    {
        [OperationContract]
        int wordLen(string word);
    }



    public class StockService : IfaceService
    {
        public int wordLen(string word)
        {
            return word.Length;
        }
    }





    public class Service
    {
        public int go( string wordin )
        {

            ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/wcfLib"));
            serviceHost.AddServiceEndpoint(typeof(IfaceService), new BasicHttpBinding(), "");

            serviceHost.Open();

            int ret = **///// HOW SHOULD I PASS wordin TO StockService to get word.Length in return?**

            serviceHost.Close();

            return ret;
        }
    }


}

что я не могу понять сейчас, как мнепередать вышеуказанную переменную wordin в ServiceContract?

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Вам необходимо создать клиент в вашей форме и напрямую вызвать wordLen () ... только класс, который наследуется от IfaceService, может быть вызван в качестве службы WCF.Итак:

//  You'll have to create references to your WCF service in the project itself...
//  Right-click your form project and pick 'Add Service Reference', picking 
//  'Discover', which should pick up the service from the service project... else
//  enter http://localhost:8000/wcfLib and hit 'Go'.
//  You'll have to enter a namespace, e.g. 'MyWcfService'... that namespace is
//  used to refer to the generated client, as follows:
MyWcfService.wcfLibClient client = new MyWcfService.wcfLibClient();

private void button1_Click(object sender, EventArgs e) {
    // You really shouldn't have the client as a member-level variable...
    textBox2.Text = Convert.ToString(client.wordLen(textBox1.Text));
}

Если ваш класс Service предназначен для размещения службы WCF, он должен быть его собственным исполняемым и запущенным ... поместите полученный код в go() в Main()

Или разместить службу WCF в IIS ... намного проще!

Редактировать

IIS = Информационные службы Интернета ... в основном размещает службу WCF через Интернет.

Чтобы разместить в IIS, создайте новый проект "Приложение службы WCF".Вы получите web.config, интерфейс по умолчанию и файл .svc.Переименуйте их или добавьте новые элементы, WCF Service, в проект.Вам нужно будет немного прочитать о развертывании в IIS, если вы идете по этому пути, но для отладки в Visual Studio это работает хорошо.

Чтобы разделить на два приложения, просто создайте форму как собственный проект... ссылка на сервис устанавливается через конфигурационный файл приложения;Вы просто указываете его на адрес машины или веб-сайта, например, http://myintranet.mycompany.com:8000/wcflib или http://myserver:8000/wcflib.

Спасибо за голосование!

0 голосов
/ 07 марта 2011

У вас определенно есть вещи задом наперед. Вы не хотите создавать ServiceHost в своем методе Go или, по крайней мере, никогда не создадите его ни в каком методе, вызываемом клиентом, потому что как клиент может вызвать его, если служба еще не создана? 1001 *

Служба в WCF запускается, и затем вы можете вызывать ее методы из удаленного клиента. Например, это ваш Main () для услуги:

ServiceHost serviceHost = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/wcfLib"));
serviceHost.AddServiceEndpoint(typeof(IfaceService), new BasicHttpBinding(), "");
serviceHost.Open();
Console.WriteLine("Press return to terminate the service");
Console.ReadLine();
serviceHost.Close();

Затем для вашего клиента вы должны использовать «Добавить ссылку на службу» в Visual Studio (щелкните правой кнопкой мыши Project в Solution Explorer, чтобы найти этот пункт меню) и введите адрес службы. Visual Studio создаст прокси для вашего сервиса, и это то, что вы будете создавать и использовать на клиенте. EG:

MyServiceClient client = new MyServiceClient();

textBox2.Text = Convert.ToString( client.wordLen(textBox1.Text) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...