문제

가 ASP.NET 웹 서비스로의 라인을 따라:

[WebService(Namespace = "http://internalservice.net/messageprocessing")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class ProvisioningService : WebService
{
    [WebMethod]
    public XmlDocument ProcessMessage(XmlDocument message)
    {
        // ... do stuff
    }
}

나를 호출하는 웹 서비스에서 ASP 사용하여 다음과 같습니다.

provWSDL = "http://servername:12011/MessageProcessor.asmx?wsdl"
Set service = CreateObject("MSSOAP.SoapClient30")
service.ClientProperty("ServerHTTPRequest") = True
Call service.MSSoapInit(provWSDL)

xmlMessage = "<request><task>....various xml</task></request>"
result = service.ProcessMessage(xmlMessage)

문제는 내가 발생한 경우 그 XML 에 도달한다는 방법,웹 서비스에는 배관이 추가되었는 기본 네임스페이스다.즉면 중단점을 설정 내부다(XmlDocument 메시지)내가 참조하십시오:

<request xmlns="http://internalservice.net/messageprocessing">
  <task>....various xml</task> 
</request>

때 나는 패킷을 캡처에는 와이어 나가는 것을 볼 수 있는 XML 에서 보낸 비누 툴킷은 약간 다른 것을 보낸다.순서 WS 클라이언트입니다.비누 툴킷을 전송:

<SOAP-ENV:Envelope 
    xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" 
    xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message xmlns:SOAPSDK4="http://internalservice.net/messageprocessing">
                <request>
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

하는 동안.NET 클라이언트로 보냅:

<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>
        <ProcessMessage xmlns="http://internalservice.net/messageprocessing">
            <message>
                <request xmlns="">
                    <task>...stuff to do</task>
                </request>
            </message>
        </ProcessMessage>
    </soap:Body>
</soap:Envelope>

그것은 그렇게 오래 전부터 내가 사용하는 ASP/비누 툴킷을 전화로.NET webservices,기억 안 나 모든법/비누 푸에 나를 당겨하는 데 사용하여 주변에 얻는 물건은 이렇습니다.

어떤 아이디어가?하나의 솔루션 노 COM 호출 가능.NET 프록시는 XML 문자열로 param 및 통화 WS 내 대신에,하지만 그것은 추가 계층의 복잡성/일을 기대하지 않습니다.

도움이 되었습니까?

해결책 3

나이:

비누 클라이언트 요청 노드기본에서 네임스페이스:

<ProcessMessage xmlns="http://internalservice.net/messageprocessing">

추가 빈 네임스페이스의 기본을 보내는 XML 의 ASP 클라이언트 재정의 이 행동:

xmlMessage = "<request xmlns=''><task>....various xml</task></request>"

다른 팁

Kev,

내가 찾는 솔루션이지만,그것은 간단하지 않습니다.

을 만들 필요가 있는 사용자 정의의 구현 IHeaderHandler 을 만드는 적절한 헤더가 있습니다.

거기에 좋은 여기에 단계별:

http://msdn.microsoft.com/en-us/library/ms980699.aspx

편집:나는 당신의 업데이트합니다.좋은 해결할 수 있습을 찾으려면 이 링크에 관계 없이:D

나는 그것을 당신은에 액세스하는 서비스 코드만 소비하는 클라이언트 오른쪽?

기는 네임스페이스의 XmlDocument 으로의 첫 번째 부분은 방법입니다.

다음과 같습니다.

XmlDocument changeDocumentNamespace(XmlDocument doc, string newNamespace) 
{   
    if (doc.DocumentElement.NamespaceURI.Length > 0) 
    {
        doc.DocumentElement.SetAttribute("xmlns", newNameSpace);
        XmlDocument newDoc = new XmlDocument();
        newDoc.LoadXml(doc.OuterXml);
        return newDoc;
    }
    else 
    {
        return doc;
    }
}

다음:

[WebService(Namespace = "http://internalservice.net/messageprocessing")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class ProvisioningService : WebService
{
    [WebMethod]
    public XmlDocument ProcessMessage(XmlDocument message)
    {
        message = changeDocumentNamespace(message,String.Empty);
        // Do Stuff...
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top