これは、WindowsストアアプリでExpect100Continueヘッダーを削除できないという以前の質問の続きです。参考までに、WindowsストアアプリのServicePoint.Expect100Continueを参照してください。
私は今、一歩下がって、HttpClientを使用してHttpContentをWebサービスに手動でPOSTしています。私は次のようなクラスを使用しています:
[XmlRoot(ElementName = "myRootElement", Namespace = "myNamespace.com")]
public class MyRootElement
{
[XmlElement(Namespace = "myNamespace.com", ElementName = "myParameter")]
public string MyParameter { get; set; }
}
HttpContentの本体をシリアル化して構築するために、次のようなシリアル化コードを使用しています。
using (MemoryStream stream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
settings.Indent = false;
settings.NamespaceHandling = NamespaceHandling.Default;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "myNamespace.com");
using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
{
XmlSerializer ser = new XmlSerializer(input.GetType());
ser.Serialize(xmlWriter, input, ns);
}
var arr = stream.ToArray();
body = Encoding.UTF8.GetString(arr, 0, arr.Length);
}
var result = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
body
+ "</s:Body></s:Envelope>";
ただし、出力に欠陥があります。名前空間はルート要素にのみ書き込まれ、パラメータ要素には書き込まれません。「?」があります 体の最初の文字私はのソースを削除または見つけることができません。
また、SOAPエンベロープで本文を囲む文字列連結よりも優れた方法があるかどうかを知りたいです。