2012-03-29 104 views
0

我是新的WCF和resful服務。我正在學習如何在WCF服務中傳遞對象。在WCF服務中傳遞對象

我有粘貼代碼和web.config文件。我不知道爲什麼我看到這個錯誤。

請幫助..

Operation 'saveDataGet' in contract 'IRestServiceImpl' has a query variable named ' param1' of type 'GainSoft.TaskManager.Service.InputData', but type 'GainSoft.TaskManager.Service.InputData' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'. 
Description: An unhandled exception occurred during the execution of the current web request. 
Please review the stack trace for more information about the error and where it 

originated in the code. 


Exception Details: System.InvalidOperationException: Operation 'saveDataGet' in 
contract 'IRestServiceImpl' has a query variable named 'param1' of type 
'GainSoft.TaskManager.Service.InputData', but type 
'GainSoft.TaskManager.Service.InputData' is not convertible by  
'QueryStringConverter'. Variables for UriTemplate query values must have types that 
can be converted by 'QueryStringConverter'. 

public class RestServiceImpl : IRestServiceImpl 
{ 
    public string saveDataGet(InputData param1) 
    { 
     return "Via GET: " + param1.FirstName + " " + param1.LastName; 
    } 
    public string saveDataPost(InputData param1) 
    { 
     return "Via POST: " + param1.FirstName + " " + param1.LastName; 
    } 



    public class MyQueryStringConverter : QueryStringConverter 
    { 
     public override bool CanConvert(Type type) 
     { 
      return (type == typeof(InputData)) || base.CanConvert(type); 
     } 
     public override object ConvertStringToValue(string parameter, Type parameterType) 
     { 
      if (parameterType == typeof(InputData)) 
      { 
       string[] parts = parameter.Split(','); 
       return new InputData { FirstName = parts[0], LastName = parts[1] }; 
      } 
      else 
      { 
       return base.ConvertStringToValue(parameter, parameterType); 
      } 
     } 
    } 
    public class MyWebHttpBehavior : WebHttpBehavior 
    { 
     protected override QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription) 
     { 
      return new MyQueryStringConverter(); 
     } 
    } 

public interface IRestServiceImpl 
{ 

    [OperationContract] 
    [WebGet(UriTemplate = "/InsertData?param1={param1}")] 

    string saveDataGet(InputData param1); 

    [OperationContract] 
    [WebInvoke(UriTemplate = "/InsertData")] 
    string saveDataPost(InputData param1); 
} 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehaviour" > 
     <!-- Add the following element to your service behavior configuration. --> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="MyWebHttpBehavior"> 
     <webHttp/> 

    </behavior> 
    </endpointBehaviors> 
</behaviors> 
+0

http://stackoverflow.com/questions/3738201/how-can-i-implement-a-custom-querystringconverter-for-restful-wcf – 2012-03-29 01:48:00

回答

0

我認爲你不能傳遞任何複雜的數據類型爲查詢參數。根據您的要求使用POST或PUT等其他動詞。你也可以將InputData序列化爲json字符串或者smth。並通過這種方式。

+0

可以顯示,從代碼示例,鏈接到博客或帖子也將是很有幫助。 – Gainster 2012-03-29 22:42:25

+0

肯定的是,在這裏你去,希望這有助於 [鏈接](http://stackoverflow.com/questions/1709781/wcf-rest-parameters-involving-complex-types) – Helikaon 2012-03-30 07:01:10