2013-08-06 90 views
1

我在经典ASP调用WCF服务中的方法时遇到问题。下面是服务和配置的代码:从经典ASP呼叫WCF服务

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="BasicHttpBinding_PdfGenerator" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transferMode="Buffered"> 
     <readerQuotas 
      maxArrayLength="2147483647" 
      maxStringContentLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" 
      maxDepth="32" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <services> 
    <service behaviorConfiguration="serviceBehavior" 
      name="Plumtree.dartKW.PdfGenerator.Web.PdfGeneratorService"> 
     <endpoint binding="basicHttpBinding" 
       bindingName="BasicHttpBinding_PdfGenerator" 
       contract="Plumtree.dartKW.PdfGenerator.Web.IPdfGeneratorService" /> 
     <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

我在WCF测试客户端测试上述方法

服务

[ServiceContract(Namespace = "http://Plumtree.dartKW.PdfGenerator.Web")] 
public interface IPdfGeneratorService 
{ 
    [OperationContract] 
    String GeneratePdf(String xml); 
} 

public class PdfGeneratorService : IPdfGeneratorService 
{ 
    #region IPdfGeneratorService Members 

    public String GeneratePdf(String xml) 
    { 
     return "hello"; 
    } 

    #endregion 
} 

配置和正常工作。下面是从我的ASP页面的代码:

mexMonikerString = "service:mexAddress='http://localhost:51997/PdfGeneratorService.svc/mex'" 
mexMonikerString = mexMonikerString + ", address='http://localhost:51997/PdfGeneratorService.svc'" 
mexMonikerString = mexMonikerString + ", binding=basicHttpBinding" 
mexMonikerString = mexMonikerString + ", bindingNamespace='http://tempuri.org/'" 
mexMonikerString = mexMonikerString + ", contract=IPdfGeneratorService" 
mexMonikerString = mexMonikerString + ", contractNamespace='http://Plumtree.dartKW.PdfGenerator.Web'" 

dim service 
service = GetObject(mexMonikerString) 

每当我试试这个,我得到了以下错误:

System.ServiceModel error '800401e4'

The contract does not have an endpoint supporting the binding specified.

我试过在绰号传递绑定配置名称BasicHttpBinding_PdfGenerator,而不是basicHttpBinding但我犯了同样的错误。我在网上找不到任何其他这种错误的例子。

任何帮助,将不胜感激

回答

0

您可以使用JavaScript不会有太大困难做到这一点。下面是一个嵌入到简单HTML页面中的JavaScript的副本,我将其提供给将成为WCF的Web服务用户。

困难的部分可能是弄清楚WCF服务在请求中的期望。如果您有权访问WCF服务代码,则很容易弄清楚。另一种方法是使用Fiddler捕获在客户端和wcf主机之间发送的成功消息。或者WSDL,如果你能生成一个。

祝你好运。

function Ping() {    
//set up varable 
var sContent; 
// 'Content-Type: text/xml \r\n ' + 
// 'Host: localhost:8085 \r\n \r\n '; 
sContent= "<xml>Your message matching the web service's data or message contract</xml>"; 

var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open('POST', Demo.URL.value, true); 
xmlhttp.onreadystatechange = function() { 
//this section acts as a listener, waiting for response from host 
if (xmlhttp.readyState == 4||xmlhttp.readyState == 0) { 
    //alert("Ready state: " + xmlhttp.readyState.toString()); 
    if (xmlhttp.status == 200) { 
     //alert("good"); 
     Demo.pingresponse.value = "Response: " +xmlhttp.responseText; 
    } 
    if (xmlhttp.status !=200){ 
     //alert("bad"); 
     Demo.pingresponse.value = "Error: " +xmlhttp.status.toString() +" response text: " +xmlhttp.responseText; 
    } 
} else { 
    //alert("readystate bad"); 
} 
} 
//send request  

xmlhttp.setRequestHeader("POST http:localhost:8085/HostInterface/HostConnect HTTP/1.1"); 
xmlhttp.setRequestHeader("VsDebuggerCausalityData",""); 
xmlhttp.setRequestHeader ("SOAPAction","\"http://somestuff\""); 
xmlhttp.setRequestHeader("Host","localhost:8085"); 
xmlhttp.setRequestHeader("Expect","100-continue"); 
xmlhttp.setRequestHeader("Accept-Encoding","gzip, deflate"); 
xmlhttp.setRequestHeader("Connection","Keep-Alive"); 
xmlhttp.setRequestHeader("Content-Length","639");     
xmlhttp.setRequestHeader("Content-type", "text/xml; charset=utf-8"); 
xmlhttp.send(sContent);     
} 
+0

感谢您的回复。根据无数的在线演示,我读过我的原代码应该工作。无论是服务的配置还是我正在构建的绰号,都有问题。有很多人在做我正在做的事情的例子,不幸的是,似乎没有人遇到与我一样的错误!非常沮丧 –

+0

理解..我想如果你不能让你的ASP版本工作,你可以试试我在做什么。它很容易插入任何HTML/ASP类型构造。 – Brian