将PHP参数传递给WCF - 丢失字符串值 - 丢失所有值

时间:2013-08-10 20:22:08

标签: php asp.net .net wcf parameters

我无法让我的PHP应用程序正确地将参数传递给我的.NET 4.0 WCF服务。 这是服务代码:

[OperationBehavior(ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)]
int ICatalogService.CalculatePercentComplete(CoursePercentParam cpp)
{
     string courseID = cpp.Course;
     int mediaIndex = cpp.MediaIndex;
     double position = cpp.Position;

     return ((ICatalogService)this).CalculateCoursePercentComplete(courseID, mediaIndex, position);
}

和CoursePercentParam类:

[DataContract(Namespace = "Somenamespace.Core.1.0")]
public class CoursePercentParam
{
    string course;
    int mediaindex;
    double position;
    public CoursePercentParam()
    {
    }
    public CoursePercentParam(CoursePercentParam cpp)
        : this()
    {
        this.Course = cpp.Course;
        this.MediaIndex = cpp.MediaIndex;
        this.Position = cpp.Position;
    }

    public string Course { get { return this.course; } set { this.course = value; } }
    public int MediaIndex { get { return this.mediaindex; } set { this.mediaindex = value; } }
    public double Position { get { return this.position; } set { this.position = value; } }
}

请注意,代码中还有其他几个地方可以毫无问题地调用此服务。 - 按预期工作。 Web应用程序和WCF服务之间的通信正在运行。只是这一次调用没有正确获取参数。

以下是调用它的PHP代码:

$getPercentComplete_obj->cpp = array('Course' => $showcurrentcourse->CourseIdentifier, 'MediaIndex' => $mediaIndex, 'Position' => $position);
$getPercentComplete_res = $courseService->CalculatePercentComplete($getPercentComplete_obj);
$percentComplete = $getPercentComplete_res->CalculatePercentCompleteResult;

以下是PHP应用程序的打印参数:

stdClass Object
(
    [cpp] => Array
        (
            [Course] => BI-0310
            [MediaIndex] => 5
            [Position] => 1203.234
        )

)
stdClass Object
(
    [CalculatePercentCompleteResult] => -1
)

如您所见,在PHP应用程序中,存在参数的数据。 一直看着这个好几个小时,似乎无法找到问题。

仅供参考:以下是此方法调用的方法。我也尝试使用$param_obj->courseID = $courseID作为单个参数,并且字符串参数始终为空。这就是为什么我创建了采用“CoursePercentParam”类的方法。 无论如何,这是代码:

    [OperationBehavior(ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)]
    int ICatalogService.CalculateCoursePercentComplete(string courseID, int mediaIndex, double position)
    {
        Trace.TraceInformation("courseID=>'{0}', mediaIndex=>'{1}', position=>'{2}'",
            courseID, mediaIndex, position);

        Course course = ((ICatalogService)this).GetCourse(courseID);
        if (null == course)
            return -1;

        double current = ((ICatalogService)this).CalculateCourseProgress(courseID, mediaIndex, position);
        double total = ((ICatalogService)this).GetCourseLength(course);

        int percent = (int)((current / total) * 100);
        Trace.TraceInformation("Percent Complete: {0}", percent);
        return percent;
    }

我很感激能得到的任何帮助。

谢谢你, 吉姆

0 个答案:

没有答案