将SOAP转换为REST并从函数返回许多记录

时间:2017-12-05 17:27:33

标签: vb.net rest wcf soap

将工作SOAP WCF转换为REST,并仍然使用Function来读取并返回我需要的值。

ActiveCallSevice读取实体以使用VB中的SOAP返回多个记录。如何在更改为REST时对其进行编码以返回所有记录?我尝试了很多不同版本的uriTemplate但没有任何工作。我基本上应该阅读一个视图并返回数据而不从uri获得任何参数。我使用了来自here的好例子,但是那个是手动编码循环返回的值,我有一个函数读取并返回我需要的值。

我的IActiveCalls.vb代码当前在WebGet行上 - 错误状态 - 需要常量表达式。 C:\ inetpub \ VS2013 \ wcfWazeP1 \ IActiveCalls.vb 10 13 WcfWazeP1。

Public Interface IActiveCalls

Property UriTemplate As String

<WebGet(UriTemplate = "Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents)")>
<OperationContract()>
Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents)

Implements IActiveCalls
Dim dbP1RDW As New ReportingDWEntities

Public Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents) Implements IActiveCalls.GetWazeCalls
    Return dbP1RDW.DIT_CurrentSOTrafficIncidents.OrderBy(Function(o) o.IncidentDate).ToList()
End Function

<DataContract()>
Public Class ActiveCalls

End Class

我在实现行上的ActiveCalls.vb代码 - 错误状态-Class'ActiveCallsService'必须为接口'IActiveCalls'实现'Property UriTemplate As String'。实现属性必须具有匹配的“ReadOnly”或“WriteOnly”说明符。 C:\ inetpub \ VS2013 \ wcfWazeP1 \ ActiveCalls.vb 9 16 WcfWazeP1。

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.Text

Public Class ActiveCallsService
    Implements IActiveCalls
    Dim dbP1RDW As New ReportingDWEntities

    Public Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents) Implements IActiveCalls.GetWazeCalls
        Return dbP1RDW.DIT_CurrentSOTrafficIncidents.OrderBy(Function(o) o.IncidentDate).ToList()
    End Function
End Class

12/07/2017感谢GMan80013,经过修改。仍有错误阻止它运行。我尝试了几次UriTemplate宣言,没有运气。 UriTemplate的名称有多重要?我可以调用它,还是应该引用ActiveCallsService?抱歉,如此不知情。 ActiveCalls.vb有两个错误 1-未找到字段或属性“UriTemplate”。 C:\的Inetpub \ VS2013 \ wcfWazeP1 \ IActiveCalls.vbWcfWazeP1 2-'WebGetAttribute'不能用作属性,因为它不从'System.Attribute'继承。 C:\的Inetpub \ VS2013 \ wcfWazeP1 \ IActiveCalls.vb          公共接口IActiveCalls

    Property UriTemplate As String

    <WebGet(UriTemplate:="currentSOTrafficeIncidents")>
    <OperationContract()>
    Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents)

End Interface

ActiveCalls.vb - 我添加了公共属性UriTemplate,此处没有错误     进口系统     Imports System.Collections.Generic     进口System.Linq     导入System.Runtime.Serialization     Imports System.ServiceModel     Imports System.Text

Public Class ActiveCallsService
    Implements IActiveCalls
    Dim dbP1RDW As New ReportingDWEntities
    Public Property UriTemplate As String Implements IActiveCalls.UriTemplate

    Public Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents) 
    Implements IActiveCalls.GetWazeCalls
    Return dbP1RDW.DIT_CurrentSOTrafficIncidents.OrderBy(Function(o) 
o.IncidentDate).ToList()
    End Function
End Class

1 个答案:

答案 0 :(得分:0)

1)URI模板值用于表示主机名后面的URL部分。如果您的站点地址是http://www.myhouse.com/,并且您希望客户端获取具有此地址http://www.myhouse.com/currentSOTrafficIncidents的所有记录,则“currentSOTrafficIncidents”是URI模板。此外,可能是错误的原因,请确保在UriTemplate:= =而不仅仅是<WebGet(UriTemplate:= "currentSOTrafficIncidents")> <OperationContract()> Function GetWazeCalls() As List(Of DIT_CurrentSOTrafficIncidents) 。只要您指定参数名称,就必须在vb中执行此操作。

Property UriTemplate As String

2)在您的界面中,您声明了Public Property UriTemplate As String Implements IActiveCalls.UriTemplate ,并且ActiveCalls.vb类中缺少此公共属性。我不认为你需要这个,但是可以从IActiveCalls类中删除它。如果您确实希望将其保留在那里,请将此错误添加到ActiveCalls.vb以更正错误。

<AutoCompleteTextView
   android:id="@+id/gender_list"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:layout_centerHorizontal="true"
   android:layout_marginTop="65dp"
   android:ems="10"
   android:editable="false" >