部署到 SharePoint 2010 网站的 WCF 服务出现“EndPoint Not Found”错误

2023-12-26

我正在尝试利用自动完成扩展器 /questions/tagged/autocompleteextender来自ajax控制工具包 /questions/tagged/ajaxcontroltoolkit在我的一个共享点 /questions/tagged/sharepoint解决方案(这需要旧版本的库,因为所有最新版本都需要 .NET Framework 4.0),不幸的是我无法在 UserControl 中使用页面方法,只能在实际页面中使用 http://siderite.blogspot.com/2008/03/using-ajaxcontroltoolkit.html。因此,我只剩下一个选择,那就是使用实际 Web 服务中的方法。问题是我似乎无法弄清楚如何正确部署服务和配置 web.config。当我尝试在浏览器中查看元数据信息时,我收到一条错误消息,指出“未找到端点”。但是,当我尝试输入 URL 并将方法名称附加到 URL 时,它实际上会找到并执行返回 JSON 数据的方法 - 这显然意味着它可以找到我的服务。另外,我可以使用 jQuery 调用我的服务并返回 JSON 数据 - 但我不想在这个项目中使用 jQuery,而宁愿只保留一切纯 C#。

我想知道的是,为什么我不能在浏览器中显示“漂亮的元数据信息”,以便获得“温暖的模糊”并允许其他应用程序以应有的工作方式正确发现服务?

我三次检查了 web.config,我同时输入了metadataExchange 端点和引用我的服务的端点,并且将 httpGetEnabled 设置为“true”。我尝试运行 svcutil /t:metadata 并将其指向我的服务,但出现了几个错误,第一个错误告诉我它无法获取元数据,第二个错误告诉我元数据包含无法解析的引用,第三个错误是HTTP GET 错误,表明 HTML 文档不包含 Web 服务发现信息。即使我的 svc 文件与 OOTB SharePoint 服务位于同一 ISAPI 目录中,并且可以为这些服务生成 XSD 文件,但不能为我的服务生成 XSD 文件。

这是我当前的 web.config 文件的样子......

<?xml version="1.0"?>
 <configuration>
  <system.web>
   <compilation debug="true" />
    <identity impersonate="true"/>
  </system.web>
 <system.serviceModel>
 <!-- we need this to enable session -->
 <client>
 </client>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
 <behaviors>
  <endpointBehaviors>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="metadataSupportBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true" httpGetUrl="http://myserver/sites/mysitecollection/_vti_bin/WebServices/MyService.svc" policyVersion="Policy15"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceAuthorization impersonateCallerForAllOperations="false"/>
      <serviceCredentials>
        <windowsAuthentication includeWindowsGroups="true" />
      </serviceCredentials>
    </behavior>
    <behavior name="defaultBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
</bindings>
<services>
  <service behaviorConfiguration="metadataSupportBehavior" name="Sample.WebServices.MyService">
    <clear />
    <endpoint address="" binding="basicHttpBinding" contract="Sample.WebServices.IMyService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
      <identity>
        <certificateReference storeName="My" storeLocation="LocalMachine"
          x509FindType="FindBySubjectDistinguishedName" />
      </identity>
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://myserver/sites/mysitecollection/_vti_bin/WebServices/MyService.svc" />
      </baseAddresses>
    </host>
  </service>
</services>

我在这里真的很茫然。有什么想法吗?

提前致谢!!!

更新#1: OK, I almost让它工作了。我的意思是我“技术上”做到了,但只是在浏览器中并且有一些注意事项。

我做的第一件事是将以下代码添加到我的 web.config 文件中:

  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>

然后更新我的服务端点以包含对新配置的引用,如下所示:

    <endpoint address="" binding="webHttpBinding" contract="Sample.WebServices.IMyService" behaviorConfiguration="webBehavior">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

我还更改了绑定基本HttpBinding to webHttp绑定.

现在注意事项...

  1. 我可以让它完全发挥作用并在浏览器中返回 XML 响应,但是ONLY如果我在调试模式下运行该服务,这意味着它托管在 Visual Studio 而不是 IIS 中,因此它实际上不算数。

  2. 当我不在调试模式下运行服务时,我收到一条错误,内容是“异常消息是‘值不能为空。参数名称:源’”。

在调试器中单步执行代码后,我看到真正的错误是:

请求“IBM.Data.DB2.DB2Permission、IBM.Data.DB2、Version=9.0.0.2、Culture=neutral、PublicKeyToken=7c307b91aa13d208”类型的权限失败。

用简单的英语来说,这意味着我正在尝试在我的 SharePoint 站点中加载 32 位版本的 IBM.Data.DB2 DLL,但不幸的是,该站点仅允许 64 位程序集。

所以我的第一反应是“啊哈!”这应该很简单吧?我的意思是,我要么需要找到 DLL 的 64 位版本,要么只需配置 IIS 中的 SharePoint 站点使用的应用程序池,以允许加载 32 位程序集,一切都应该很顺利!我不聪明吗?但NOSharePoint 说!我不仅不会让你做任何这些事情*,而且我会让你的整个 SharePoint 场完全无法使用,甚至无法尝试实施此类可笑的解决方案!

因此,现在当我尝试导航到 SharePoint 场中的任何资源时,我会收到此消息。

[NullReferenceException: Object reference not set to an instance of an object.]
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.get_ApplicationProperties() +134
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.get_PartitionIDs() +44
   Microsoft.Office.Server.Administration.UserProfileApplicationProxy.IsAvailable(SPServiceContext serviceContext) +329
   Microsoft.Office.Server.WebControls.MyLinksRibbon.get_PortalAvailable() +44
   Microsoft.Office.Server.WebControls.MyLinksRibbon.EnsureMySiteUrls() +60
   Microsoft.Office.Server.WebControls.MyLinksRibbon.get_PortalMySiteUrlAvailable() +15
   Microsoft.Office.Server.WebControls.MyLinksRibbon.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427

即使我撤消对 IIS、应用程序池、DLL 的所有更改,重新启动 IIS、重新启动我的服务器等,也不起作用。我完全搞砸了。

美好时光。

*公平地说,SharePoint 与 64 位 IBM 驱动程序不可用无关,但我只是假设,即使有一个我可以在技术上使用的驱动程序,SharePoint 也会找到一种方法来惩罚我试图获得完成的任何工作。

更新#2:好的,我修复了整个“SharePoint 网站无法正常工作”的问题。基本上使用的应用程序池allSharePoint 相关网站似乎已更改为启用 32 位应用程序,包括 SecurityTokenServiceApplication(对位于this http://underthehood.ironworks.com/2011/07/sharepoint-systeminvalidoperationexception-the-farm-is-unavailable.html网站不仅有同样的问题,而且还发布了解决方案)。现在,虽然我不记得具体将每个 SharePoint 相关应用程序池的值设置为 true,但我愿意配合并说,也许在绝望的情况下,我可能只是说让它见鬼去吧,并开始鲁莽地更改配置设置。你知道,因为这正是经验丰富的开发人员所做的。

无论如何...

现在我的管理中心网站已恢复并正在运行,但 UserProfileApplication 服务仍然不稳定,我仍然倾向于认为我的 SecurityTokenServiceApplication 服务仍然出问题,因为我收到错误(当然详细信息是隐藏的,因为配置了 web.config)为此)告诉我“由于内部错误,服务器无法处理请求”。

详情请关注...

更新#3:好的,我把一切都恢复到原来的工作形式了。我确认,仅为 SharePoint 资源使用的一个应用程序池启用 32 位应用程序会有效地更新所有其他应用程序以效仿。我确实知道这一点,因为我自己确实没有更改每个与 SharePoint 相关的应用程序池的该值。我会记得经历过类似的事情。事实证明,SharePoint Web 服务使用的所有那些具有时髦的“类似 GUID”名称的应用程序池也全部更新为允许 32 位应用程序运行,这就是导致我的环境变得一团糟的原因。

此外,我按照提供的建议让 SecurityTokenService 在浏览器中正确显示其元数据here http://blog.libinuko.com/2013/01/19/sharepoint-2010-fixing-an-exception-was-thrown-in-a-call-to-a-policy-export-extension/。虽然它们看起来有点像“黑客”,但它们是小型且可逆的黑客,所以我很感兴趣。

简而言之,您可以像这样编辑每个服务的配置文件:

  1. 在 spStsActAsBinding 绑定中,将 httpTransport 重命名为 httpsTransport。
  2. 将allowInsecureTransport =“true”和enableUnsecuredResponse =“true”添加到绑定安全性。
  3. 确保您仅定义 1 个绑定配置(例如,在 Profile Service 中,您会发现同一服务有 2 个绑定配置,每个绑定配置针对 http 和 https 协议)。

完成所有这些操作后,您应该能够获得我正在尝试为正在开发的自定义 WCF 服务获取的“模糊元数据”。

所以现在我只需要回去解决我最初的问题,即让 32 位版本的 IBM.Data.DB2 DLL 与 SharePoint 2010 一起使用。我还没有尝试过的一件事是创建一个 IIS 托管完全独立于 SharePoint 运行的服务。这样做将使我能够创建一个单独的应用程序池,它实际上可以运行 32 位应用程序,而不会导致 SharePoint 崩溃 - 希望如此。

更新#4:好的,首先我要告诉你忽略我上面关于乱用 SecurityTokenService 的建议。当然,您会因更改而获得“模糊的温暖元数据”,但随后可能会导致您的 SharePoint 网站崩溃。

所以无论如何...我现在创建了一个完全独立于 SharePoint 的网站,该网站使用自己的应用程序池,该应用程序池配置为允许 32 位应用程序,因此从技术上讲应该可以解决我的所有问题。好吧,当我尝试在文本框中输入文本时,它不会“自动完成”,但会发生网络活动,因为我在 Fiddler 中看到它。奇怪的是它只发生一次。这意味着,如果我按退格键并重新输入其他内容,则不会对 Web 服务进行其他调用。我必须重新加载页面才能再次测试。当它调用该方法时收到的错误消息是“405 Method Not allowed”。现在,我的方法接口签名使用 WebInvoke,并将 Method 属性设置为“GET”,我被告知应该可以正常工作,并且过去在进行返回 JSON 数据的 REST 调用时也可以,只是现在它不起作用。哦,在 Web 浏览器中它可以工作,我看到该方法返回了精彩的 XML 结果。但是,当我尝试在 SharePoint UserControl 中使用 AutoCompleteExtender 来调用该方法(或使用任何其他客户端)时,它不会。我尝试使用 WebGet() 属性,但 Web 浏览器中也没有返回任何内容。我认为我遇到了 415 错误。

更新#5:我发现另一篇文章中有些人似乎遇到了与我现在遇到的完全相同的问题,唯一的区别是即使我在同一个项目中拥有网络服务,我也无法让自动完成功能正常工作。我也尝试了他帖子中提出的建议,但它们也不起作用。这里有一个link https://stackoverflow.com/questions/2115701/calling-an-ajax-enabled-wcf-application-from-autocompleteextender/15277778#15277778给有兴趣的人发帖。


对于 Webpart 项目(使用 ASCX),您可以:

1) 在IIS中启用SP站点的匿名身份验证

2) 添加SP映射文件夹ISAPI

3)在ISAPI中创建YourService.asmx

<%@ WebService Language="C#" Class="YourNamespace.YourService, YourAsm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YourPublicKeyToken"%>

4)编辑用户控制代码:

public partial class YourControl : UserControl
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        FixFormAction();
        CheckScriptManager();           
        EnsureUpdatePanelFixups();
    }

    private void FixFormAction()
    {
        // Fix problem with postbacks and form actions (DevDiv 55525)
        Page.ClientScript.RegisterStartupScript(GetType(), ID, "_spOriginalFormAction = document.forms[0].action;", true);

        // By default, the onsubmit event for forms in SharePoint master pages call "return _spFormOnSubmitWrapper()" 
        // which blocks async postbacks after the first one.   Not calling "_spFormOnSubmitWrapper()" breaks all postbacks
        // and defeats the purpose of _spFormOnSubmitWrapper() which is to block repetitive postbacks.  
        // To call _spFormOnSubmitWrapper() and allow partial postbacks, remove "return" from the original call.  
        if (Page.Form != null)
        {
            string formOnSubmitAtt = Page.Form.Attributes["onsubmit"];
            if (formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
            {
                Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
            }
        }
    }

    private void EnsureUpdatePanelFixups()
    {
        if (this.Page.Form != null)
        {
            var fixupScript = @"
            _spBodyOnLoadFunctionNames.push(""_initFormActionAjax"");
            function _initFormActionAjax()
            {
            if (_spEscapedFormAction == document.forms[0].action)
            {
            document.forms[0]._initialAction = document.forms[0].action;
            }
            }
            var RestoreToOriginalFormActionCore = RestoreToOriginalFormAction;
            RestoreToOriginalFormAction = function()
            {
            if (_spOriginalFormAction != null)
            {
            RestoreToOriginalFormActionCore();
            document.forms[0]._initialAction = document.forms[0].action;
            }
            }
            ";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "EnsureUpdatePanelFixup", fixupScript, true);
        }
    }

    private ScriptManager CheckScriptManager()
    {
        ScriptManager sm = ScriptManager.GetCurrent(Page);
        if (sm == null)
        {
            if (Page.Form != null)
            {
                sm = new ScriptManager();
                sm.ID = Page.Form.ID + "_ScriptManager";
                Page.Form.Controls.Add(sm);
                //Page.Form.Controls.AddAt(0, sm);  
            }
        }
        sm.EnablePageMethods = true;

        var sharedPath = @"~/_layouts/Share/";
        var path = @"~/_layouts/YourWebPart/";

        sm.Scripts.Add(new ScriptReference { Path = @"/_vti_bin/YourService.asmx/JS" });

        //Registering ExtJS
        Page.ClientScript.RegisterClientScriptInclude(GetType(), "ext-all", sharedPath + "scripts/ext-all.js");

        ScriptManager.RegisterClientScriptBlock(this, GetType(), "ext-css",
                                    "<link href='" +
                                    sharedPath + "resources/css/ext-all.css' rel='stylesheet' type='text/css' />", false);

        Page.ClientScript.RegisterClientScriptInclude(GetType(), "YourScript", path + "scripts/Script.js");

        return sm;
    }

}

5) 编辑您的服务代码:

[WebService(Namespace = "http://tempuri/ws")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class YourService : WebService
{
    //[WebMethod]
    [ScriptMethod]
    [WebMethod(EnableSession = true)]
    //[ScriptMethod(UseHttpGet = true)]
    public string YourWebMethod(string arg)
    {           
        return arg;
    }
}

6) 在控制 JavaScript 中使用 Web 服务方法:

YourNamespace.YourService.YourWebMethod(arg, function (result) {
        if (result) {
            if (typeof result == 'string') {
                alert(result);
            }
        }
    }, function (error) { alert('YourWebMethod failed! ' + error.get_message()); });
}

没有网络配置

对于 ISAPI 子文件夹中的 svc

<%@ ServiceHost Debug="true" Language="C#"
Service="Namespace.MyService, MyAsm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=MyPublicKeyToken"
%>

web.config 可以是:

<system.webServer>    
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2097151"/>
      </requestFiltering>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime executionTimeout="60" maxRequestLength="2097151" />        
  </system.web>  
  <system.serviceModel>    
    <bindings>
      <basicHttpBinding>        
        <binding name="MyHttpBinding"
         maxBufferPoolSize="2147483647"
         maxBufferSize="2147483647"
         maxReceivedMessageSize="2147483647">          
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>          
          <readerQuotas maxArrayLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
        </binding>
      </basicHttpBinding>      
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CustomServiceBehaviour">          
          <serviceMetadata httpGetEnabled="true"/>          
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>          
        </behavior>
      </serviceBehaviors>      
    </behaviors>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
      <service behaviorConfiguration="CustomServiceBehaviour" name="Namespace.MyService">        
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyHttpBinding" contract="Namespace.IMyService" bindingNamespace="http://tempuri/ws" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>      
    </services>
    </system.serviceModel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署到 SharePoint 2010 网站的 WCF 服务出现“EndPoint Not Found”错误 的相关文章

  • HTTP 错误 500.19 - 无法读取配置文件

    在我的一个 ASP NET 应用程序中 由于下面显示的错误 我突然无法在 Visual Studio 2013 中运行它 它似乎正在尝试从甚至不存在的路径打开 web config 我的所有项目代码 包括 web config 都位于 C
  • 优雅地终止 WCF 服务 - 完成所有打开的会话并限制新会话

    我有一个我编写的 WCF 服务 它托管在 Windows 服务中 它以 PerSession 模式运行 该服务允许客户端通过该服务远程打开文件 更改文件以及关闭文件 到目前为止一切工作都非常顺利 当 Windows 服务停止时 我希望能够让
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • 选项卡容器 - 事件未触发

    i am creating a tab container at runtime and make 1 of the column member as the tab header once user click on the tab i
  • 我希望能够使用 lambda 表达式来指定要通过 wcf 服务返回的值范围

    我不知道这是否可能 但这会很酷 问题是这是否可能 但如果可能的话 举一个例子 我不确定您将使用什么方法签名来将 lambda 表达式传递到其中 例如方法IList
  • 为单个列表注册事件处理程序

    我有一个共享点事件处理程序 我想为单个列表激活它 而不是站点中的所有列表 我该怎么办 得到答案了 我们需要运行这段代码 也许在控制台应用程序中 不过 我仍然不知道如何在添加事件处理程序后将其删除 string siteUrl Console
  • AJAX控制工具包加载所有脚本

    我有一个奇怪的问题 我似乎无法解决 我正在使用 AJAX 控制工具包日历延长器在我的一些页面上 尽管我通过网络找到了信息 但我似乎无法让它与常规程序一起工作ScriptManager控制 它only与一个ToolkitScriptManag
  • 如何使用 WSDL 和 XSD 的注释生成 .NET 类

    有一些 XSD 和 WSDL 我想从它们生成 C 代码 我使用了 svcutil exe 但它不会从 XSD 注释生成 XML 注释
  • WCF 是否始终需要我的主机具有管理员权限?

    我正在跟进this http msdn microsoft com en us library ms730935 aspx教程 似乎要在我的应用程序中实现 WCF 它需要以管理员权限运行 我想使用远程处理only同一台机器上的进程之间进行通
  • 自定义 WCF DataContractSerializer

    是否可以用我自己的序列化程序替换 Windows Communication Foundation 中的 dataContractSerializer 如果可能的话 我怎样才能实现这一目标 是的 您可以提供自己的序列化器实现 默认情况下 W
  • 可能有相同的合同,相同的绑定,相同的地址,但不同的端口?

    我有需要通过 basicHTTPBinding 进行通信的手持设备 我有合同 一切都按照广告进行 我需要扩展它以轻松支持测试环境 培训 当然还有生产的更改 我选择了端口路线 认为我可以公开具有端口差异的不同端点 并根据端口决定我想要来自哪个
  • 使用 ContractNamespace 属性设置 WCF DataContract 命名空间

    在设计我的服务时 我决定要自定义出现在生成的 WSDL 中的名称空间 对于数据合同 我遇到了合约命名空间 http msdn microsoft com en us library system runtime serialization
  • 自定义行为的配置错误

    我创建了一个与 WCF 服务一起使用的自定义行为 以将所有错误记录到应用程序日志中 我做了一个BehaviorExtensionElement对于行为 public ErrorLoggingBehaviorExtensionElement
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • 自托管 WCF REST 服务和基本身份验证

    我创建了一个自托管的 WCF REST 服务 带有 WCF REST Starter Kit Preview 2 中的一些额外内容 这一切工作正常 我现在正在尝试向服务添加基本身份验证 但我在 WCF 堆栈中遇到了一些相当大的障碍 这阻止了
  • 通过代理服务器连接到 WCF 服务时出现奇怪的异常

    例外 相对 URI 不支持此操作 发生在以下情况 我有一个 WCF 服务 ServiceContract ProtectionLevel ProtectionLevel None public interface IMyService Op
  • 模拟 WCF 客户端代理的最佳方法

    有没有办法使用 Rhino 模拟框架来模拟 WCF 客户端代理 以便我可以访问 Channel 属性 我正在尝试对 Proxy Close 方法进行单元测试 但由于代理是使用抽象基类构造的ClientBase
  • 元素“system.webServer”具有无效的子元素“aspNetCore”

    我从 Visual Studio 2015 中的模板之一创建了一个新的 ASP NET Core MVC 6 应用程序 我正在看的教程说要修改web config文件 当我打开该文件时 Visual Studio 会抛出警告 严重性代码 说
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 如何在 MessageContract 类型中使用 XML 属性?

    前面的注释 我无法更改传入的 SOAP 请求的格式 因为它们是由国际标准固定的 weeeeeeeee 我有一个 SOAP 请求进入我的 WCF 服务 如下所示

随机推荐