gpt4 book ai didi

wcf - 配置 WCF 服务以接受不合格的参数

转载 作者:行者123 更新时间:2023-12-01 15:43:19 24 4
gpt4 key购买 nike

我的 WCF 服务无法识别以非限定形式发送的请求参数值,而是替换为默认值。

例如,此请求将产生“您输入:21”的结果。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.example.org/SampleService/">
<soapenv:Header/>
<soapenv:Body>
<sam:GetData>
<sam:value>21</sam:value>
</sam:GetData>
</soapenv:Body>
</soapenv:Envelope>

但是这个请求的响应是“你输入了:0”。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.example.org/SampleService/">
<soapenv:Header/>
<soapenv:Body>
<sam:GetData>
<value>21</value>
</sam:GetData>
</soapenv:Body>
</soapenv:Envelope>

如何修改我的服务,以便两种类型的请求都使用我发送的值?

IService1.cs:

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

namespace WcfServiceLibrary2
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in App.config.
[ServiceContract(Namespace = "http://www.example.org/SampleService/", Name = "sampleservice")]
public interface IService1
{
[OperationContract]
string GetData(int value);

[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here
}

// Use a data contract as illustrated in the sample below to add composite types to service operations
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";

[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}

[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
}

Service1.cs:

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

namespace WcfServiceLibrary2
{
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}

public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
}

最佳答案

这两个请求不是等效的 XML,也不符合服务 WSDL。 “不合格”请求会将 value 元素解析为默认的 XML 命名空间,这将取决于该请求的整体 XML。 WCF 不将 value 理解为 soap envelop XML 的一部分,并且无法将其与任何 DataContract 类相匹配。您可以尝试将默认 XML 命名空间设为您的服务 XML 命名空间,如下所示,然后查看服务是否会正确处理它:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://www.example.org/SampleService/">
<soapenv:Header/>
<soapenv:Body>
<GetData>
<value>21</value>
</GetData>
</soapenv:Body>
</soapenv:Envelope>

关于wcf - 配置 WCF 服务以接受不合格的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com