Рейтинг:
0
Thomas Nielsen - getCore
если вы добавили ссылку на службу в языковой файл определения веб-службы для конечной точки, visual studio создаст прокси-сервер с именем, которое вы дали ссылке, и вы можете создать его, например, в операторе using.
Итак, предположим, что у вас есть служба, размещенная в консольном приложении с одной конечной точкой, локально реализующей IHWservice at http://localhost:3000
Этот способ предоставления самостоятельного хоста является лучшим способом работы с ним и его отладки, а перенос его куда-то еще-всего лишь несколько шагов
[ServiceContract(Namespace = "http:://company.url/area/concern/year/month/day")]
public interface IHWService {
[OperationContract]
string GetMessage();
}
public class HelloWorldService : IHWService{
public string GetMessage(){
return "Hello";
}
}
//... in other assembly, for development self host console application
class Program{
static void Main(string[] args){
using(var host = new ServiceHost(typeof(HelloWorldService))){
host.Open();
Console.ReadLine();
}
}
}
Чтобы заставить это работать, ваш конфигурационный файл этого хоста будет указывать что-то вроде
<system.serviceModel>
<services>
<service name="HWService" behviourConfiguration="yourservicebehaviour">
<endpoint address="" contrac="IHWService" binding="basicHttpVinding" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:3000/" />
// ...
Теперь создать новый прокси-сервер и использовать его так же просто, как
using(var proxy = new HWService.WhatYouCalledYourReferenceClient()){
Console.WriteLine(proxy.GetMessage());
}
конечно, ваша конфигурация этого места должна иметь свою версию system.servicemodel thingies abc (Address, Binding, Configuration) для зеркального отображения хоста.
Kingshuk_SP
Привет, Томас..
У меня нет хостинга ни в одной консоли. Это требование не позволяет мне принимать гостей..
У меня есть файл wsdl в папке.
Я добавил ссылку на этот wsdl по пути, где он находится.
теперь я добавил ссылку, используя локальный путь..
(E:\some папка\какая-то папка\имя файла.wsdl)
после добавления ссылки я сделал следующее...
используя WSDLCall.Значение servicereference1;
Значение servicereference1.GetCustomerData custInfo = новый GetCustomerData();
---------- после этого мне нужна помощь...
вот если я перейду к определению GetCustomerData (), то смогу это увидеть...
[Система.граф CodeDOM.Компилятор.Атрибут Generatedcodeattribute("System.Xml", "4.7.9.0")]
[Система.Размер()]
[Система.Диагностика.Debuggerstepthroughattribute атрибута()]
[Система.ComponentModel.DesignerCategoryAttribute ("код")]
[Система.В формате XML.Сериализации.XmlTypeAttribute(пространство имен="http://someurl" +
"управление/В1")]
открытый частичный класс GetCustomerData: object, System.ComponentModel.INotifyPropertyChanged {
частная custAccIDField CustID ;
private OtherOrgId1 idField;
/// & lt;Примечания>
[Система.В формате XML.Сериализации.XmlElementAttribute(Order=0)]
custAccID публичных CustID {
получить {
вернуть это.custAccIDField;
}
набор {
это.custAccIDField = значение;
этот.PropertyChanged ("custAccID");
}
}
/// & lt;Примечания>
[Система.В формате XML.Сериализации.XmlElementAttribute(Order=1)]
общественные OtherOrgId1 ИД {
получить {
вернуть это.idField;
}
набор {
это.idField = значение;
этот.PropertyChanged ("id");
}
}
система публичных мероприятий.ComponentModel.PropertyChangedEventHandler PropertyChanged;
охраняемых недействительными PropertyChanged, как(строку имя_свойства) {
Система.ComponentModel.PropertyChangedEventHandler propertyChanged = это.события PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(это, новая система.ComponentModel.PropertyChangedEventArgs(имя свойства));
}
}
}
----------------------
здесь входными данными должны быть "Id" и " custAccID"
Thomas Nielsen - getCore
самостоятельный хостинг предназначен для целей разработки, единственная ситуация, когда это невозможно, - это если сервис не является вашим собственным :)
Во всяком случае, похоже, что вы успешно сгенерировали прокси-код "домашний телефон". Теперь вам нужно сосредоточиться на том, где находится ваша конечная точка, и настроить ее так, чтобы вы могли указать свой "телефон" на какой-то номер, например IP или другой идентификатор хоста, и на какой порт он вас принимает.
Очень часто вам придется войти в систему, чтобы получить какой-то токен, который вы затем можете использовать для запроса. в вашем случае это может выглядеть так что вы должны знать какого клиента вы ищете в первую очередь и ваша семантика не кажется действительной я бы изменил то что вы написали
(какие, почему, о, почему есть ли у вас ссылка значение servicereference1 ?!! ИМО всегда дает переменным осмысленные имена, но это совсем другая история ;) )
использование (VAR proxy = new WSDLCall.ServiceReference1.ServiceReference1Client()){
Значение servicereference1.GetCustomerData custInfo = прокси.GetCustomerData();
//почему вызов выше не принимает параметр? без этого нет особого смысла
}
Kingshuk_SP
хорошо, теперь я понимаю лучше.
Ты знаешь, почему я так спрашиваю. На самом деле, если мы создадим демо-сервис wcf, подобный этому:
файл service1 открытый класс : файл iservice1
{
публичная строка GetData(int value)
{
возвращенная строка.Формат ("вы ввели: {0}", значение);
}
}
и после этого просто запустите его... затем, если мы создадим любое клиентское приложение, как показано ниже:
использование WSDLCall.DemoWCFService;
пространство имен WSDLCall
{
общественный разделяемого класса CallMethods : система.Веб.Пользовательского интерфейса.Страницы
{
protected void Page_Load(отправитель объекта, EventArgs e)
{
Service1Client obj = новый Service1Client();
lblData.Text = obj. GetData(2);
}
}
}
мы можем легко получить такой доступ прямо сейчас... так что нам не нужно указывать какую-либо конечную точку.
но в WSDL-файле у вас будут только классы, а не такие методы.
Вот почему я запутался в том, как позвонить.
а "ServiceReference1" был просто примером ... в моем проекте я обязательно буду использовать осмысленное имя.. :) :)
Thomas Nielsen - getCore
На самом деле вы не будете отправлять никаких запросов в wsdl. WSDL-это сокращение от Web Service Definition Language, эквивалентное xml-схеме, которая просто описывает операции, предлагаемые сервисом. Конечная точка обычно является тем же адресом, откуда вы вытащили wsdl, только без части пути