【问题标题】:convert SOAP to REST and return many records from a function将 SOAP 转换为 REST 并从函数返回许多记录
【发布时间】:2017-12-05 17:27:32
【问题描述】:

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

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

WebGet 行上的当前 IActiveCalls.vb 代码 - 错误状态 - 需要常量表达式。 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

Implement 行上的我的 ActiveCalls.vb 代码 - 错误状态 - 类“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,这里没有错误 进口系统 导入 System.Collections.Generic 导入系统.Linq 导入 System.Runtime.Serialization 导入 System.ServiceModel 导入 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

【问题讨论】:

    标签: vb.net rest wcf soap


    【解决方案1】:

    1) URI 模板值用于表示主机名之后的 URL 部分。如果您的站点地址是http://www.myhouse.com/,并且您希望客户端获取具有此地址http://www.myhouse.com/currentSOTrafficIncidents 的所有记录,那么“currentSOTrafficIncidents”就是 URI 模板。此外,可能是错误的原因,请确保在UriTemplate 之后您有:= 而不仅仅是=。每当您指定参数名称时,这在 vb 中都是必需的。

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

    2) 在您的界面中,您声明了 Property UriTemplate As String,而 ActiveCalls.vb 类中缺少此公共属性。但是,我认为您不需要它,并且可以将其从 IActiveCalls 类中删除。如果您真的想保留它,请通过将其添加到 ActiveCalls.vb 来纠正错误。

    Public Property UriTemplate As String Implements IActiveCalls.UriTemplate
    

    【讨论】:

    • 12/07/2017 感谢 GMan80013,更改后。仍然有阻止它运行的错误,我用更新编辑了我的问题。
    猜你喜欢
    • 2011-04-15
    • 2013-02-07
    • 2019-01-09
    • 2017-05-14
    • 2016-11-12
    • 1970-01-01
    • 2021-02-19
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多