从经典ASP调用WCF服务
从classic ASP调用WCF服务中的方法时遇到问题。以下是服务和配置的代码: 服务从经典ASP调用WCF服务,wcf,asp-classic,Wcf,Asp Classic,从classic ASP调用WCF服务中的方法时遇到问题。以下是服务和配置的代码: 服务 [ServiceContract(Namespace = "http://Plumtree.dartKW.PdfGenerator.Web")] public interface IPdfGeneratorService { [OperationContract] String GeneratePdf(String xml); } public class PdfGeneratorServ
[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
}
配置
<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>
每当我尝试此操作时,都会出现以下错误:
System.ServiceModel错误“800401e4”
协定没有支持指定绑定的终结点
我尝试在名字对象中传递绑定配置名称BasicHttpBinding\u PdfGenerator
,而不是BasicHttpBinding
,但我得到了相同的错误。我在网上也找不到这个错误的其他例子
任何帮助都将不胜感激您可以使用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);
}
函数Ping(){
//设置变量
var内容;
//'内容类型:text/xml\r\n'+
//'主机:本地主机:8085\r\n\r\n';
sContent=“与web服务的数据或消息契约匹配的消息”;
var xmlhttp=newxmlhttprequest();
open('POST',Demo.URL.value,true);
xmlhttp.onreadystatechange=函数(){
//此部分充当侦听器,等待主机的响应
if(xmlhttp.readyState==4 | | xmlhttp.readyState==0){
//警报(“就绪状态:+xmlhttp.readyState.toString());
if(xmlhttp.status==200){
//警惕(“良好”);
Demo.pingresponse.value=“Response:+xmlhttp.responseText;
}
如果(xmlhttp.status!=200){
//警惕(“坏”);
Demo.pingresponse.value=“错误:”+xmlhttp.status.toString()+“响应文本:”+xmlhttp.responseText;
}
}否则{
//警报(“readystate坏”);
}
}
//发送请求
setRequestHeader(“POST http:localhost:8085/HostInterface/HostConnect http/1.1”);
setRequestHeader(“VsDebuggerCausalityData”,”);
xmlhttp.setRequestHeader(“SOAPAction”,“\”http://somestuff\"");
setRequestHeader(“主机”,“本地主机:8085”);
setRequestHeader(“Expect”、“100 continue”);
setRequestHeader(“接受编码”、“gzip、deflate”);
setRequestHeader(“连接”,“保持活动”);
setRequestHeader(“内容长度”,“639”);
setRequestHeader(“内容类型”,“text/xml;charset=utf-8”);
xmlhttp.send(scocontent);
}
感谢您的回复。根据无数的在线演示,我已经阅读了我的原始代码。我正在构建的服务或名字对象的配置存在问题。有很多人在做我想做的事情,不幸的是,似乎没有人遇到过和我一样的错误!非常令人沮丧。。我想如果你不能让你的ASP版本工作,你可以试试我正在做的。它很容易插入任何HTML/ASP类型的构造中。
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);
}