我在让我的网络服务上运行POST和GET时感到非常沮丧。我需要停下来,放松一下,弄清楚出了什么问题。
我把它分解成一个非常简单的方法,只需要一个字符串并回显它。这适用于我在我的localhost上设置的IIS,它适用于生产盒,但同样的配置在我的测试系统上破坏。请让我知道我做错了什么。访问时:
http://test.softwaredesignexcellence.com/WebPostService/WebPostSvc.svc/json/Test?testtext=test%20me
我正在获取一个带有粗体标题的页面,其中包含文本“Service”和较小文本中的子标题,表示“未找到端点”。 为什么我收到此消息?使用查询字符串“http://localhost/Services/WebPostSvc.svc/json/Test?testtext = test%20me”在我的本地主机上运行相同的服务。我收到了回复:
<string>Echoing test me</string>
生产服务器,我无法链接到它,因为它是内部的,它的响应略有不同,但它仍然正常工作:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Echoing test me</string>
当我在本地发布,点击本地Web服务器,一切正常时,这是令人沮丧的。我将已发布的文件夹复制到生产服务器,在该服务器上键入类似的URL,一切正常,然后我将相同的代码和相同的设置ftp到我的测试服务器,它正在打破上面列出的错误(端点)未找到。)。 我不明白是什么让我无法在测试服务器上运行简单的服务?
Web服务的接口:
[ServiceContract( Namespace="http://services.alorica.com/WebPostSvc/1.0" )]
public interface IWebPostSvc
{
[OperationContract]
[WebGet]
string Test(string testtext);
}
这是我尝试使用的简单方法:
[WebService(Namespace = "http://services.alorica.com/WebPostSvc/1.0")]
[ServiceBehavior(Namespace = "http://services.alorica.com/WebPostSvc/1.0")]
public class WebPostSvc : IWebPostSvc
{
public string Test(string testtext)
{
return String.Format("Echoing {0}", testtext);
}
}
我的设置变得不合适,因为我一直在试图让一切正常。 更新 - 我刚刚删除了serviceHostingEnvironment部分,它似乎没有必要,Web服务仍在使用SOAP,但json仍然给我“端点未找到”。
<system.serviceModel>
<!-- Set up Custom Behaviors -->
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="SvcMetaBehavior" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Set up the binding configuration -->
<bindings>
<basicHttpBinding>
<binding name="SOAPBinding">
<security mode="None">
</security>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="JSONBinding"
hostNameComparisonMode="StrongWildcard"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
openTimeout="00:10:00"
closeTimeout="00:10:00"
maxReceivedMessageSize="1000000"
maxBufferPoolSize="2000000"
bypassProxyOnLocal="false"
useDefaultWebProxy="true" >
<security mode="None">
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<!-- -->
<service behaviorConfiguration="SvcMetaBehavior"
name="WebPostService.WebPostSvc"
>
<endpoint address="soap"
binding="basicHttpBinding"
bindingConfiguration="SOAPBinding"
contract="WebPostService.IWebPostSvc"
/>
<endpoint address="json"
binding="webHttpBinding"
bindingConfiguration="JSONBinding"
behaviorConfiguration="jsonBehavior"
contract="WebPostService.IWebPostSvc"
/>
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
</system.serviceModel>
答案 0 :(得分:1)
您的服务没有在端点中定义任何主机。
<services>
<service name="WebPostService.WebPostSvc">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="SOAPBinding" name="serviceBasicHttpBinding" contract="WebPostService.IWebPostSvc">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://test.softwaredesignexcellence.com" />
</baseAddresses>
</host>
</service>
</services>
答案 1 :(得分:0)
尝试将UriTemplate添加到WebGet。实际上你应该使用WebInvoke进行POST。
答案 2 :(得分:0)
谢谢你们,答复得那么快。我发现了我的特殊问题,它不像我想象的那样在配置中。
我发布的服务器没有安装.NET 3.5,这很好,因为.NET 2.0就足够了,但它缺少程序集。我不知道为什么我没有得到更好的错误消息,但解决方案是查看我的引用,并将它们切换到“复制本地”并进行重新发布,之后一切都在该服务器上工作。我沮丧地对所有引用做了“复制本地”,但我确信我只需要对那些未包含在.NET 2.0框架中的内容执行此操作。