powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF GET (XML Response)
41 сообщений из 41, показаны все 2 страниц
WCF GET (XML Response)
    #36511926
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю WCF службу с привязкой webHttpBinding

Описываю контракт с атрибутом WebGet

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebGet(UriTemplate = "Sub?x={x}&y={y}", ResponseFormat = WebMessageFormat.Xml)]
        string Subtract(long x, long y);
    }


Делаю запрос
http://localhost/payment_app/web/Sub?x=14&y=12

результат выполнения
Код: plaintext
1.
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">x =  14  y =  12 </string> 

как получить результат в виде xml

Код: plaintext
1.
2.
3.
4.
5.
<Response>
       <X></X>
       <Y></Y>
       ....
</Response>

------------------------
Любой дурак может написать код, который может распознать компьютер. Хорошие программисты пишут код, который люди могут понять. ~ Мартин Фаулер
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36511952
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где код Subtract ?
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36511962
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

Код: plaintext
1.
2.
3.
public string Subtract(long x, long y)
        {
            return "x = " + x + " y = " + y; 
        }
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512091
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что ты тогда хотел получить на выходе?
Возвращай массив строк string[] тогда
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512123
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

я написал что я хотел получить, просто не знаю как сформировать такой xml

переписал

Код: plaintext
1.
2.
3.
4.
5.
        public string[] Subtract(long x, long y)
        {
            string[] values = {x.ToString(), y.ToString()};

            return values;
        }

получил
Код: plaintext
1.
2.
3.
<ArrayOfstring>
<string> 10 </string>
<string> 20 </string>
</ArrayOfstring>

как получить xml с нужными мне именами полей?

Код: plaintext
1.
2.
3.
4.
<Response>
       <X></X>
       <Y></Y>
       ....
</Response>
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512236
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
[DataContract(Namespace = "")]
public class Responzzz
{
    [DataMember]
    public string X{ get; set; }
    [DataMember]
    public string Y{ get; set; }
}
///
[ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebGet(UriTemplate = "Sub?x={x}&y={y}", ResponseFormat = WebMessageFormat.Xml)]
        Responzzz Subtract(long x, long y);
    }
///
public Responzzz Subtract(long x, long y)
        {
            return new Responzzz {X = x.ToString(), Y = y.ToString()};
        }
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512243
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
[DataContract(Name = "Response")]
public class Responzzz

...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512368
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sbabiv,

чё там? Есть респонс? :)
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512420
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sbabiv
------------------------
Любой дурак может написать код, который может распознать компьютер. Хорошие программисты пишут код, который люди могут понять. ~ Мартин Фаулер
а реальные перцы сваливают не поблагодарив.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512434
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

да есть, только другой

http://localhost/payment_app/web/GetData?value=5&x=48
Код: plaintext
1.
  <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Connection Accept Accept-Encoding Accept-Language Host User-Agent</string> 
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512437
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

извини, занят был
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512451
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sbabiv,

на клиенте DataContract тоже должен быть
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512460
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

по-другому разве никак?
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512497
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredsbabiv,

на клиенте DataContract тоже должен быть
наврал. UriTemplate другой должен быть в таком случае. На ощупь не скажу какой.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512515
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется сериализатор другой нужен. Через [System.SerializableAttribute()] а не ДатаКонтракт
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36512543
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bured,

завтра гляну
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36528957
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sbabiv,
это контракт
Код: plaintext
1.
2.
3.
4.
5.
<ServiceContract()> _
Public Interface CP
    <OperationContract(), WebGet(UriTemplate:="/clientaccesspolicy.xml")> _
    Function GetCP() As Stream
End Interface
это его реализация.
выдает любой xml.
сделай шаблон и меняй в нем значения. а то долго будешь елозить по сериализаторам всяким.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 Public Function GetCP() As System.IO.Stream Implements CP.GetCP
        'Return Assembly.GetExecutingAssembly().GetManifestResourceStream("OnlineRegCmd.ClientAccessPolicy.xml")
        Const result As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & _
"<access-policy>" & _
"    <cross-domain-access> " & _
"        <policy> " & _
"            <allow-from http-request-headers=""*""> " & _
"                <domain uri=""*""/>" & _
"            </allow-from> " & _
"            <grant-to>" & _
"                <resource path=""/"" include-subpaths=""true""/>" & _
"            </grant-to>" & _
"        </policy>" & _
"    </cross-domain-access>" & _
"</access-policy>"

        If Not IsNothing(WebOperationContext.Current) Then
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"
            Return New MemoryStream(Encoding.UTF8.GetBytes(result))
        End If
    End Function
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36616020
sbabiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKsbabiv,
это контракт
Код: plaintext
1.
2.
3.
4.
5.
<ServiceContract()> _
Public Interface CP
    <OperationContract(), WebGet(UriTemplate:="/clientaccesspolicy.xml")> _
    Function GetCP() As Stream
End Interface
это его реализация.
выдает любой xml.
сделай шаблон и меняй в нем значения. а то долго будешь елозить по сериализаторам всяким.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 Public Function GetCP() As System.IO.Stream Implements CP.GetCP
        'Return Assembly.GetExecutingAssembly().GetManifestResourceStream("OnlineRegCmd.ClientAccessPolicy.xml")
        Const result As String = "<?xml version=""1.0"" encoding=""utf-8""?>" & _
"<access-policy>" & _
"    <cross-domain-access> " & _
"        <policy> " & _
"            <allow-from http-request-headers=""*""> " & _
"                <domain uri=""*""/>" & _
"            </allow-from> " & _
"            <grant-to>" & _
"                <resource path=""/"" include-subpaths=""true""/>" & _
"            </grant-to>" & _
"        </policy>" & _
"    </cross-domain-access>" & _
"</access-policy>"

        If Not IsNothing(WebOperationContext.Current) Then
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"
            Return New MemoryStream(Encoding.UTF8.GetBytes(result))
        End If
    End Function



ага, спасибо. это правда самый простой и удобный вариант
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36624614
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[<DataContract>]
type Responce = {
    [<DataMember>] mutable x : string; 
    [<DataMember>] mutable y : string; }

[<ServiceContract>]
type service() =
      [<OperationContract; WebGet (UriTemplate="/xml/{a}/{b}")>]
        member x.getXml (a, b) = {x = a; y = b}
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36626520
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselsky,

можно побольше контекста?
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36626928
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36626940
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36626983
WCF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF
Гость
tsyselsky,

на C# какой аналог будет у кода?
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36627015
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
namespace core.wcf {
    [DataContract]
    public class Responce {
        [DataMember]public string x;
        [DataMember] public string y; 
    }

    [ServiceContract]
    public class service { 
    [OperationContract , WebGet(UriTemplate="/xml/{a}/{b}")]
        public Responce getXml(string a, string b) {
            return new Responce { x = a, y = b};
        }
    }
}
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36627305
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselsky,

но это не подходит.
видишь там

Код: plaintext
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">

вот это не должно быть в xml ответе. основное условие сериализации.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629241
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKtsyselsky,

но это не подходит.
видишь там

Код: plaintext
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">

вот это не должно быть в xml ответе. основное условие сериализации.

Я так понимаю смущает присутствие атрибута xmlns="..."


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
[<ServiceContract>]
type service() =
    
    let xn s = XName.op_Implicit(s)
    let xe (n, v:string) = new XElement(xn n, v)
    
    [<OperationContract; WebGet(UriTemplate="/xml/{a}/{b}")>]
    member x.getXml(a, b) = new XElement(xn "Responce", xe("x", a), xe("y", b))


...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629288
WCF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF
Гость
Спасибо за ответы, но всё в пустую.
Ну не врубается никто на F#!
Это пока не общепринятый язык.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629313
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WCFСпасибо за ответы, но всё в пустую.
Ну не врубается никто на F#!
Это пока не общепринятый язык.

Пардон.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace core.wcf {
    [ServiceContract]
    public class service{

        private XElement xe(string n, string v) { return new XElement(n, v); }

        [OperationContract, WebGet (UriTemplate="/xml/{a}/{b}")]
        public XElement getXml (string a, string b) {
            return new XElement("Responce", this.xe ("x", a), this.xe("y", b));                 
        }
    }
}

...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629504
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WCFСпасибо за ответы, но всё в пустую.
Ну не врубается никто на F#!
Это пока не общепринятый язык.

Хм, похоже C# тоже не "в масть".
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629518
Фотография Хопа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselskyХм, похоже C# тоже не "в масть".
В смысле?
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629542
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХопаtsyselskyХм, похоже C# тоже не "в масть".
В смысле?

Это я в ответ на реплику о F# ...

Поскольку реакции на C# код не последовало,
наверное мое предложение сконструировать XElement
не совсем то что было нужно вопрошающим жентельменам.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629547
WCF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF
Гость
Ну ясно. Либо Stream, либо XElement. Класс видимо никак не выдать в ответе.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629618
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WCFНу ясно. Либо Stream, либо XElement. Класс видимо никак не выдать в ответе.

Вы имеете ввиду, сериализованный в xml (без аттрибута xlmns="...", ) .net класс ?
Если да, то ниже приведенный код, отдает мне вот такой вот xml

Код: plaintext
1.
2.
3.
- <Responce>
      <x> 2 </x> 
      <y> 3 </y> 
  </Responce>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
namespace core.wcf {
    [ServiceContract] 
    public class service{

        public class data {
            public string x;
            public string y;
        }

        private XElement xe(string n, string v) {
            return new XElement(n, v);    
        }

        [OperationContract, WebGet(UriTemplate="/xml/{a}/{b}")]
        public string getXml (string a, string b) {
            data d = new data { x = a, y = b };
            DataContractSerializer dcs = new DataContractSerializer(typeof(data));
            using (Stream ms = new MemoryStream()) {
                dcs.WriteObject(ms, d);
                ms.Seek( 0 , SeekOrigin.Begin);
                XmlReader xr = XmlReader.Create(ms);
                XNode xn = XElement.ReadFrom(xr);
                return xn.ToString();
            }            
       }
    }
}
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629626
WCF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF
Гость
я имел в виду написать так с WCF GET видимо нельзя:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[DataContract]
public class Data {
            public string x;
            public string y;
        }


[OperationContract, WebGet(UriTemplate="/xml/{a}/{b}")]
        public Data getData (string a, string b) {

...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629636
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиенты WCF Get использует аякс для вызова методов: поэтому либо строка, либо xml, либо json.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629637
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, DataContractAttribute, в любом случае, включает в ответ неймспейс (дефолтный или кастомный).
Лично я нахожу присутствие даного атрибута в xml документе логичным и полезным.
Но если, по какой то причине xmlns ну ни как не монтируется в схему,
у нас есть на выбор несколько вариантов.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629663
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу пардона, вышеприведенный код код кастомного сериалайзера не совсем корректный.
Вот работающий C# код, возвращающий XElement (но также с неймспесом).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
namespace core.wcf {
      
    public class responce {
                public string x;
                public string y;
            }      

    [ServiceContract] 
    public class service{

        [OperationContract, WebGet(UriTemplate="/xml/{a}/{b}")]
        public XElement getXml (string a, string b) {
            responce d = new responce { x = a, y = b };
            DataContractSerializer dcs = new DataContractSerializer(typeof(responce));
            using (Stream ms = new MemoryStream()) {
                dcs.WriteObject(ms, d);
                ms.Seek( 0 , SeekOrigin.Begin);
                XmlReader xr = XmlReader.Create(ms);
                xr.MoveToContent();
                return XElement.ReadFrom(xr) as XElement;             
            }            
        }
    }
}
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629669
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код на F# отрезает все атрибуты и неймспейсы из входящего XElement'a

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
module xmlns 

open System
open System.Xml
open System.Xml.Linq

let rec remove (x:XElement) =
    let xn s = XName.op_Implicit s 
    match x.HasElements with
    | false -> new XElement(xn (x.Name.LocalName), x.Value)
    | _ -> new XElement(xn (x.Name.LocalName), x.Elements() |> Seq.map remove)

если подключить этот модуль и предидущий return изменить на
Код: plaintext
1.
2.
...
return xmlns.remove(XElement.ReadFrom(xr) as XElement);

то в итоге должон быть чистый xml
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36629773
Фотография Хопа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredКлиенты WCF Get использует аякс для вызова методов: поэтому либо строка, либо xml, либо json.

Stream тоже вполне ничего.
...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36630077
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиент, в итоге , получит XML или JSON
Топикстартер, и все учавствовавшие пытались изменить стандартное поведение
сериалайзера, или точнее поучавствовать в конструировании XML вывода.
Не более того.

Код: plaintext
[WebGet(ResponseFormat = WebMessageFormat.Xml)] 

...
Рейтинг: 0 / 0
WCF GET (XML Response)
    #36631206
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselskyКлиент, в итоге , получит XML или JSON
Топикстартер, и все учавствовавшие пытались изменить стандартное поведение
сериалайзера, или точнее поучавствовать в конструировании XML вывода.
Не более того.

Код: plaintext
[WebGet(ResponseFormat = WebMessageFormat.Xml)] 


По идее мессадж инспектором можно изъять лишнее. Я тут где-то постил пример, но только не с WebGet. Но, думаю, можно.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF GET (XML Response)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]