wcf c#console应用程序中的休息服务消耗

时间:2012-12-27 17:55:07

标签: wcf wcf-rest

我通过转到New-> projects-> WCF服务应用程序来制作wcf休息服务 我在托管应用程序中托管wcf rest服务并引用了wcf rest服务时,我无法使用控制台应用程序中的方法 我的申请代码如下:
IRestServiceImpL

    [ServiceContract]
        public interface IRestServiceImpL
        {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, 
        RequestFormat = WebMessageFormat.Xml, UriTemplate = "XmlData/{id}")]
        string XmlData(string id);

        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, 
        RequestFormat = WebMessageFormat.Json, UriTemplate = "JsonData/{id}")]
        string JsonData(string id);
        }



RestServiceImpL.svc.cs

[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
    public class RestServiceImpL : IRestServiceImpL
    {
       public string XmlData(string id)
       {
            return "you requested for " + id;
        }

        public string JsonData(string id)
        {
            return "you requested for " + id;
        }
}



配置文件
         

    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
    <bindings>
        <webHttpBinding>
            <binding name="StreamedRequestWebBinding"
                     bypassProxyOnLocal="true"
                     useDefaultWebProxy="false"
                     hostNameComparisonMode="WeakWildcard"
                     sendTimeout="10:15:00"
                     openTimeout="10:15:00"
                     receiveTimeout="10:15:00"
                     maxReceivedMessageSize="2147483647"
                     maxBufferSize="2147483647"
                     maxBufferPoolSize="2147483647"
                     transferMode="StreamedRequest"
                     crossDomainScriptAccessEnabled="true"
             >
                <readerQuotas maxArrayLength="2147483647"
                              maxStringContentLength="2147483647" />
            </binding>
        </webHttpBinding>
    </bindings>
    <services>
        <service name="RestService.RestServiceImpL" behaviorConfiguration="ServiceBehaviour">
            <!--<endpoint address="" binding="basicHttpBinding"  contract="RestService.IRestServiceImpL"></endpoint>-->
            <endpoint address="" binding="webHttpBinding" name="StreamedRequestWebBinding" bindingConfiguration="StreamedRequestWebBinding"  contract="RestService.IRestServiceImpL" behaviorConfiguration="web"></endpoint>
        </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehaviour">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- 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="false"/>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="web">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
</system.serviceModel>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*"/>
        </customHeaders>
    </httpProtocol>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>



我在IIS中托管此服务应用程序

现在在我调用其方法时引用控制台应用程序之后 通过使用代理类然后我得到无效操作合同异常的错误 该端点未指定

呼叫代码如下:

ServiceClient oServiceClient = new ServiceClient();<br/>
oServiceClient.JsonData("123");


请说明代码中存在的问题。

1 个答案:

答案 0 :(得分:3)

感谢堆栈溢出支持......我做到了.. 调用Wcf Rest服务代码如下所示:

//code for xml Response consumption from WCF rest Service[Start]
WebRequest req = WebRequest.Create(@"http://RestService.com/WcfRestService/RestServiceImpL.svc/XmlData/sad");
req.Method = "GET";
req.ContentType = @"application/xml; charset=utf-8";
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
if (resp.StatusCode == HttpStatusCode.OK)
{
    XmlDocument myXMLDocument = new XmlDocument();
    XmlReader myXMLReader = new XmlTextReader(resp.GetResponseStream());
    myXMLDocument.Load(myXMLReader);
    Console.WriteLine(myXMLDocument.InnerText);
}
//code for xml Response consumption from WCF rest Service[END]

//****************************************************************************
//code for json Response consumption from WCF rest Service[Start]
WebRequest req2 = WebRequest.Create(@"http://RestService.com/WcfRestService/RestServiceImpL.svc/JsonData/as");
req2.Method = "GET";
req2.ContentType = @"application/json; charset=utf-8";
HttpWebResponse response = (HttpWebResponse)req2.GetResponse();
string jsonResponse = string.Empty;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
    jsonResponse = sr.ReadToEnd();
    Console.WriteLine(jsonResponse);
}
//code for json Response consumption from WCF rest Service[END]