我知道之前已经问过这些问题,但我无法在任何地方找到答案。
问题是我的asmx文件下面有代码:
namespace IrancellSmsServer
{
[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
[WebService(Namespace = "http://www.csapi.org/schema/parlayx/data/sync/v1_0/local")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class SoapServer : System.Web.Services.WebService
{
[WebMethod]
public syncOrderRelationResponse syncOrderRelation(
Sync.UserID userID,
string spID,
string productID,
string serviceID,
string serviceList,
int updateType,
string updateTime,
string updateDesc,
string effectiveTime,
string expiryTime,
item[] extensionInfo
)
{
syncOrderRelationResponse a = new syncOrderRelationResponse();
a.result = 0;
a.resultDescription = "OK";
return a;
}
}
}
这就是结果:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<syncOrderRelationResponse xmlns="http://www.csapi.org/schema/parlayx/data/sync/v1_0/local">
<syncOrderRelationResult> //dont want this
<result>0</result>
<resultDescription>OK</resultDescription>
</syncOrderRelationResult> //dont want this
</syncOrderRelationResponse>
</soap:Body>
</soap:Envelope
问题是我不想要.net自动创建的额外<syncOrderRelationResult>
标记。我希望它完全删除。我试过[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
但没有运气它让我知道我应该有一个参数。我有什么方法可以做到这一点吗?
预期结果:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<syncOrderRelationResponse xmlns="http://www.csapi.org/schema/parlayx/data/sync/v1_0/local">
<result>0</result>
<resultDescription>OK</resultDescription>
</syncOrderRelationResponse>
</soap:Body>
</soap:Envelope
这是syncOrderRelationResponse的代码:
namespace IrancellSmsServer.Sync {
using System;
using System.Web.Services;
using System.Diagnostics;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.ComponentModel;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.6.1055.0")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="DataSyncBinding", Namespace="http://www.csapi.org/wsdl/parlayx/data/sync/v1_0/service")]
public partial class DataSyncService : System.Web.Services.Protocols.SoapHttpClientProtocol {
private bool useDefaultCredentialsSetExplicitly;
/// <remarks/>
public DataSyncService() {
this.Url = global::IrancellSmsServer.Properties.Settings.Default.IrancellSmsServer_Sync_DataSyncService;
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
this.UseDefaultCredentials = true;
this.useDefaultCredentialsSetExplicitly = false;
}
else {
this.useDefaultCredentialsSetExplicitly = true;
}
}
public new string Url {
get {
return base.Url;
}
set {
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
&& (this.useDefaultCredentialsSetExplicitly == false))
&& (this.IsLocalFileSystemWebService(value) == false))) {
base.UseDefaultCredentials = false;
}
base.Url = value;
}
}
public new bool UseDefaultCredentials {
get {
return base.UseDefaultCredentials;
}
set {
base.UseDefaultCredentials = value;
this.useDefaultCredentialsSetExplicitly = true;
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("syncOrderRelationResponse", Namespace="http://www.csapi.org/schema/parlayx/data/sync/v1_0/local")]
public syncOrderRelationResponse syncOrderRelation([System.Xml.Serialization.XmlElementAttribute("syncOrderRelation", Namespace="http://www.csapi.org/schema/parlayx/data/sync/v1_0/local")] syncOrderRelation syncOrderRelation1) {
object[] results = this.Invoke("syncOrderRelation", new object[] {
syncOrderRelation1});
return ((syncOrderRelationResponse)(results[0]));
}
/// <remarks/>
public void syncOrderRelationAsync(syncOrderRelation syncOrderRelation1, object userState) {
if ((this.syncOrderRelationOperationCompleted == null)) {
this.syncOrderRelationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnsyncOrderRelationOperationCompleted);
}
this.InvokeAsync("syncOrderRelation", new object[] {
syncOrderRelation1}, this.syncOrderRelationOperationCompleted, userState);
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.csapi.org/schema/parlayx/data/sync/v1_0/local")]
public partial class syncOrderRelationResponse {
private int resultField;
private string resultDescriptionField;
//private item[] extensionInfoField;
/// <remarks/>
public int result {
get {
return this.resultField;
}
set {
this.resultField = value;
}
}
/// <remarks/>
public string resultDescription {
get {
return this.resultDescriptionField;
}
set {
this.resultDescriptionField = value;
}
}
/// <remarks/>
//[System.Xml.Serialization.XmlArrayItemAttribute("item", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
//public item[] extensionInfo {
// get {
// return this.extensionInfoField;
// }
// set {
// this.extensionInfoField = value;
// }
//}
}
/// <remarks/>
public syncOrderRelationResponse Result {
get {
this.RaiseExceptionIfNecessary();
return ((syncOrderRelationResponse)(this.results[0]));
}
}
}
}
}
感谢。
答案 0 :(得分:1)
在方法
之上添加此项[WebMethod]
[return: XmlElement("syncOrderRelationResponse")]
[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
答案 1 :(得分:0)
无法删除此结果。至少它没有记录。
但是,您可以通过return属性修改此名称:
我知道这可能对您没有直接帮助(因为您想要展平结构),但由于这不是一种标准方式,所以无论如何知道您至少可以修改名称结果标记。
答案 2 :(得分:0)
我有相同的要求,经过一段时间的挖掘,我得出了以下解决方法: 如前所述,为了删除结果标签,请执行以下操作:
attach_file 'post_picture', "#{Rails.root}/spec/files/attachment.jpg", make_visible: true
这将导致输出如下:
[WebMethod]
[return: XmlElement("syncOrderRelationResponse")]
[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
//the syncOrderRelation method goes here ...
根据需要。但是,由于ParameterStyle应用于请求和响应元素,因此它还将在请求中删除方法名称syncOrderRelation。
解决方法: 创建一个名为syncOrderRelation的类,并将syncOrderRelation请求方法中的所有参数放入您刚刚创建的类中,并使用syncOrderRelation类的Object作为该方法的参数。 完成!
答案 3 :(得分:0)
<syncOrderRelationResult>
更改为 <carResult>
,只需添加 [XmlRoot(“ carResult”)] 到您的对象,而不是您的函数/方法。这是示例:
[XmlRoot("carResult")]
public class ObjectCar
{
public string model;
public string color;
}
或将 [返回:System.Xml.Serialization.XmlElementAttribute(“ carResult”)] 添加到您的函数/方法:
[WebMethod]
[return: System.Xml.Serialization.XmlElementAttribute("carResult")]
public string syncOrderRelation(string a)
{
return a;
}
<syncOrderRelationResponse ..>
更改为 <YourFunctionName ..>
,只需添加 [SoapDocumentMethodAttribute(ResponseElementName =“ YourFunctionName”)] < / strong>转到您的函数/方法:
[WebMethod]
[return: System.Xml.Serialization.XmlElementAttribute("carResult")][SoapDocumentMethodAttribute(ResponseElementName = "YourFunctionName")]
public string syncOrderRelation(string a)
{
return a;
}
希望有帮助
答案 4 :(得分:0)
实现SoapCore(如wcf) 就我而言 写这个
[MessageContract(IsWrapped = false)]
返回返回的班级负责人并写下该内容
[return: XmlElement("availabilityResponse")]
到适配器类头
答案 5 :(得分:0)
将此添加到您的方法之上
[WebMethod]
[return: XmlElement("syncOrderRelationResponse")]
[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
并从以下位置进行更改:
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
至:
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
您还可以使用此链接:哇!